苦苦挣扎,制作算法,为益智游戏生成板

abr*_*rkn 5 c# puzzle algorithm

我正在寻找一个数字益智游戏.为了这个问题,我们假设电路板是一个由4 x 4个正方形组成的网格.(在实际的益智游戏中,这个数字将是1..15)

一个数字可能只在每列中出现一次,在每一行中出现一次,有点像数独,但没有"正方形".

有效:

[1, 2, 3, 4
2, 3, 4, 1
3, 4, 1, 2
4, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

我似乎无法想出一种能够始终生成有效的随机nxn板的算法.

我是用C#写的.

Eri*_*ert 8

首先阅读我的图形着色算法系列:

http://blogs.msdn.com/b/ericlippert/archive/tags/graph+colouring/

看起来这与你的问题无关,但是当你完成时,你会发现它与你的问题有关.


好了,既然您已经阅读过,那么您就知道可以使用图形着色算法来描述类似Sudoku的谜题,然后解决谜题的特定实例.但显然你可以使用相同的算法来生成谜题.

首先定义完全连接的图形区域.

然后修改算法,以便尝试找到两个解决方案.

现在创建一个空白图表,并将其中一个区域随机设置为随机颜色.尝试解决图表.有两种解决方案吗?然后添加另一种随机颜色.再试一遍.没有解决方案吗?然后备份一个步骤并添加不同的随机颜色.

继续这样做 - 添加随机颜色,当你没有解决方案时回溯,并继续直到你得到一个具有独特解决方案的拼图.而且你已经完成了; 你有一个随机的拼图生成器.


cor*_*iKa 0

我能想到的最简单的方法是创建一个部分游戏并解决它。如果它无法解决,或者如果它是错误的,请再做一个。;-)