什么是奇偶剪枝?
把矩阵看成如下形式:
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
从为 0 的格子走一步,必然走向为 1 的格子 。
从为 1 的格子走一步,必然走向为 0 的格子 。
即:
从 0 走向 1 必然是奇数步,从 0 走向 0 必然是偶数步。
所以当遇到从 0 走向 0 但是要求时间是奇数的或者 从 1 走向 0 但是要求时间是偶数的,都可以直接判断不可达!
首先举个例子,有如下4*4的迷宫,’.’为可走路段,’X’为障碍不可通过
S...
....
....
....
...D
从S到D的最短距离为两点横坐标差的绝对值+两点纵坐标差的绝对值(s) = abs(Sx - Dx) + abs(Sy - Dy) = 6。
遇到有障碍的时候呢
S..X
XX.X
...X
.XXX
...D
你会发现不管你怎么绕路,最后从S到达D的距离都是最短距离+ 一个偶数 即(s’=s+4),这个是可以证明的
而我们知道:
奇数 + 偶数 = 奇数
偶数 + 偶数 = 偶数
因此不管有多少障碍,不管绕多少路,只要能到达目的地,走过的距离必然是跟最短距离的奇偶性是一致的。(简单来说就是没有障碍是偶数 加上障碍的步数还是偶数即奇偶性相同)
所以如果我们知道从S到D的最短距离为奇数,那么当且仅当给定的步数T为奇数时,才有可能走到。如果给定的T的奇偶性与最短距离的奇偶性不一致,那么我们就可以直接判定这条路线永远不可达了。
用位运算判断奇偶(偶数&1=0,奇数&1=1)