我如何编写算法来解决这个难题?

时间:2012-02-26 22:46:05

标签: algorithm

需要编写算法来解决特定难题的想法。

基本上,谜题是:

在3x3网格中排列有9个灯:
A B C
D E F
G H I
(让我们说每个字母代表一个亮点)

如果打开或关闭指示灯,与其相邻的指示灯(上,下,左或右)(但不是对角线)如果处于关闭状态则会打开,如果处于打开状态则会关闭。
(例如,如果A关闭,B关闭,D关闭,你打开A,B和D也会打开)

如果给出一个3x3网格,其中随机打开或关闭的灯光,打开或关闭所需的灯光数量最少,关闭所有灯光。

1 个答案:

答案 0 :(得分:3)

您可以将此视为图论问题(http://en.wikipedia.org/wiki/Graph_theory)。

拼图的每个给定状态都是图形的顶点,每个灯光切换都是将图形转换为另一个状态的边缘。

在给定起始状态的情况下,如果您将图表扩展为广度优先,您将找到最合适的解决方案(http://en.wikipedia.org/wiki/Breadth-first_search)。

超出此范围扩展超出了这个答案的范围。但我可以指出你为解决类似但不同的3x3问题而制作的python脚本:

您可以研究我的脚本,看看它解决这个问题的原因和原因,并应用相同的概念来解决您想要的语言问题。