注意:-我已经通过回溯方法解决了上述问题,通过尝试各种方法,我正在寻找一种非常有效的方法/模式。
我们得到的棋盘大小为'N'X'N'。但是它可以包含任意数量的任意数量的白方块和黑方块。
假设有白色的'a'正方形和黑色的'b'正方形,然后,
[a + b = n * n]
我们必须继续在棋盘上用黑色方块移动,直到没有动静为止。
这是移动中发生的事情:-
1)仅在坐标为(row-1,column + 1)的情况下,我们才能在坐标:-( row,column)处选择一个黑色正方形并将其移至(row-1,column + 1) )还包含一个黑色正方形。将其移动到新位置后,旧位置(即[行,列])变空,即其颜色变为白色。
OR
2)仅在坐标为(row-1,column-1)的情况下,我们才能在坐标:-( row,column)处选择一个黑色正方形并将其移至(row-1,column-1)。 )还包含一个黑色正方形。将其移动到新位置后,旧位置(即[行,列])变空,即其颜色变为白色。
我们必须以最少的步数结束这场比赛,而问题是要找出这些步序。
让黑色正方形用“ 1”表示,白色正方形用“ 0” .....
示例:-
3X3棋盘:-
0 1 0
1 0 1
0 0 0
以最小移动次数结束游戏的移动顺序:-
1)将黑色正方形从[1,0]移到[0,1] ...现在,棋盘看起来像这样:-
0 1 0
0 0 1
0 0 0
2)我们将[1,2]处的黑色方块移至[0,1],棋盘如下所示:-
0 1 0
0 0 0
0 0 0
现在,没有有效的动作,游戏结束:-)
给定大小为'N'x'N'的棋盘,以及黑白正方形的任何配置,如何找到以最小移动次数结束游戏的移动顺序?
答案 0 :(得分:0)
查看此问题的一种方法是遍历图。由于我们正在寻找最短动作,因此我们可以利用我们对图遍历算法的了解,并考虑使用广度优先遍历。
我们将需要做一些事情来实现这一目标:
现在我们有了这个,让我们看看如何将这个问题映射到图遍历问题。
然后,找到到终端位置的最短路径的过程看起来像这样(从根节点开始):
呼吸优先遍历的魔力在这里开始。从这里开始,我们将重复此过程,以展开节点,检查终端配置,如果找不到这样的配置,则将其降到图中的某个级别。
找到终端配置后,我们知道从根节点(初始配置)到终端节点(游戏结束)的路径(代表所进行移动的边)是最短的 。现在,我们要做的就是计算返回到根节点的边的数量,并且知道最小移动量是多少。