如果我们用g(n,m)表示仅使得第n行第m列的灯的状态发生改变,而其他所有灯状态都不改变的点灯方法(点灯方法用最后一行需点击的格子的组合来表示)。
那么一共有100个值,运用这100个值,就可以推导出所有状态的最少步数解法。
--------------------------------------------------------------------
g(1,1)=3 ‘表示成10位2进制数就是 0010000000
g(1,2)=2,4 ‘表示成10位2进制数就是 0101000000
g(1,3)=1,3,5 ‘表示成10位2进制数就是 1010100000
g(1,4)=2,4,6 ‘表示成10位2进制数就是 0101010000
g(1,5)=3,5,7 ‘表示成10位2进制数就是 0010101000
g(1,6)=4,6,8 ‘表示成10位2进制数就是 0001010100
g(1,7)=5,7,9 ‘表示成10位2进制数就是 0000101010
g(1,8)=6,8,10 ‘表示成10位2进制数就是 0000010101
g(1,9)=7,9 ‘表示成10位2进制数就是 0000001010
g(1,10)=8 ‘表示成10位2进制数就是 0000000100
g(2,1)=2,3,4
g(2,2)=1,2,4,5
g(2,3)=1,3,5,6
g(2,4)=1,2,4,6,7
g(2,5)=2,3,5,7,8
g(2,6)=3,4,6,8,9
g(2,7)=4,5,7,9,10
g(2,8)=5,6,8,10
g(2,9)=6,7,9,10
g(2,10)=7,8,9
g(3,1)=1,5
g(3,2)=2,4,6
g(3,3)=5,7
g(3,4)=2,6,8
g(3,5)=1,3,7,9
g(3,6)=2,4,8,10
g(3,7)=3,5,9
g(3,8)=4,6
g(3,9)=5,7,9
g(3,10)=6,10
g(4,1)=1,3,5,6
g(4,2)=5,6,7
g(4,3)=1,3,4,6,7,8
g(4,4)=3,4,5,7,8,9
g(4,5)=1,2,4,5,6,8,9,10
g(4,6)=1,2,3,5,6,7,9,10
g(4,7)=2,3,4,6,7,8
g(4,8)=3,4,5,7,8,10
g(4,9)=4,5,6
g(4,10)=5,6,8,10
g(5,1)=3,5,7
g(5,2)=2,8
g(5,3)=1,5,9
g(5,4)=4,6,10
g(5,5)=1,3,5,7
g(5,6)=4,6,8,10
g(5,7)=1,5,7
g(5,8)=2,6,10
g(5,9)=3,9
g(5,10)=4,6,8
g(6,1)=1,2,6,7,8
g(6,2)=1,2,3,5,6,8,9
g(6,3)=2,3,5,7,9,10
g(6,4)=5,6,8,10
g(6,5)=2,3,4,6,7,9,10
g(6,6)=1,2,4,5,7,8,9
g(6,7)=1,3,5,6
g(6,8)=1,2,4,6,8,9
g(6,9)=2,3,5,6,8,9,10
g(6,10)=3,4,5,9,10
g(7,1)=9
g(7,2)=8,10
g(7,3)=7,9
g(7,4)=6,8
g(7,5)=5,7
g(7,6)=4,6
g(7,7)=3,5
g(7,8)=2,4
g(7,9)=1,3
g(7,10)=2
g(8,1)=1,2,6,7,9,10
g(8,2)=1,2,3,5,6,7,9,10
g(8,3)=2,3,5,6
g(8,4)=9,10
g(8,5)=2,3,5,6,8,9,10
g(8,6)=1,2,3,5,6,8,9
g(8,7)=1,2
g(8,8)=5,6,8,9
g(8,9)=1,2,4,5,6,8,9,10
g(8,10)=1,2,4,5,9,10
g(9,1)=3,5,9
g(9,2)=2,6,8,10
g(9,3)=1,9
g(9,4)=6
g(9,5)=1,5,7,9
g(9,6)=2,4,6,10
g(9,7)=5
g(9,8)=2,10
g(9,9)=1,3,5,9
g(9,10)=2,6,8
g(10,1)=1,3,5,7,8
g(10,2)=7,8,9
g(10,3)=1,3,5,6,8,9,10
g(10,4)=5,6,7,9,10
g(10,5)=1,3,4,6,7,8
g(10,6)=3,4,5,7,8,10
g(10,7)=1,2,4,5,6
g(10,8)=1,2,3,5,6,8,10
g(10,9)=2,3,4
g(10,10)=3,4,6,8,10
------------------------------------------------------
将所有灯不亮的格子的n,m值代入g(n,m)中,将它们全部相加,若某个数字出现偶数次,将它全部消除;若出现奇数次,保留一个。这样得到的结果就是最少步数解法。它比前面的解法少了第一步,可以直接得到结果。
这种方法适用于电脑解答,金眼睛可以将它整合进他的点灯程序中。
(可以用10位2进制数表示g(n,m),用异或运算表示不同的g(n,m)相加,计算结果非常快) |