【发布时间】:2009-08-28 00:53:40
【问题描述】:
我想知道一种算法(有效地)解决以下问题:数字 [1..9] 的二维矩阵需要在水平线上从顶部 (1) 到底部 (9) 对齐,但只能通过翻转垂直或水平与另一个数字。
示例输入矩阵:
1 8 2 6 1 6
9 2 5 1 6 2
3 6 9 2 9 8
5 1 7 4 2 8
4 2 7 6 9 5
所需的输出矩阵:
1 1 1 1 2 2
2 2 2 2 3 4
4 5 5 5 6 6
6 6 6 7 7 8
8 8 9 9 9 9
关于“翻转”的说明:以输入矩阵为例。左上角有一个“1”。那个 1 可以水平翻转,旁边是 8(第一行现在变成 8 1 2 6 1 6 ),也可以垂直翻转,下面是 9(第一列现在变成 9 1 3 5 4)。不能用 2 对角翻转。
此问题的任何解决方案(任何语言都可以)?
【问题讨论】:
-
另外,请澄清:当您说高效时,您是指算法的运行时间,还是解决方案的长度(以移动为单位)?
-
@Walt:假设移动次数越少,效率就会越高。
-
@Alex:那么那个 A* 建议真的很好。如果您的启发式小于实际剩余距离,则 A* 保证最优。
-
@WaltW 虽然 OP 说的移动次数较少,但我仍然认为他的意思是算法的运行时间。否则就不会说高效但最佳
标签: algorithm