关于===奇偶性剪枝====

来源:互联网 发布:红色警戒3mac版下载 编辑:程序博客网 时间:2024/06/04 23:50
关于奇偶剪枝


首先举个例子,有如下4*4的迷宫,'.'为可走路段,'X'为障碍不可通过


S...
....
....
...D


从S到D的最短距离为两点横坐标差的绝对值+两点纵坐标差的绝对值 = abs(Sx - Dx) + abs(Sy - Dy) = 6,这个应该是显而易见的。


遇到有障碍的时候呢


S.XX
X.XX
...X
...D


你会发现不管你怎么绕路,最后从S到达D的距离都是最短距离+一个偶数,这个是可以证明的


而我们知道:


奇数 + 偶数 = 奇数
偶数 + 偶数 = 偶数


因此不管有多少障碍,不管绕多少路,只要能到达目的地,走过的距离必然是跟最短距离的奇偶性是一致的。


所以如果我们知道从S到D的最短距离为奇数,那么当且仅当给定的步数T为奇数时,才有可能走到。如果给定的T的奇偶性与最短距离的奇偶性不一致,那么我们就可以直接判定这条路线永远不可达了。


这里还有个小技巧,我们可以使用按位与运算来简化奇偶性的判断。我们知道1的二进制是1,而奇数的二进制最后一位一定是1,而偶数的二进制最后一位一定是0。所以如果数字&1的结果为1,那么数字为奇数,反之为偶数。
==============================================================
原文链接:https://www.slyar.com/blog/depth-first-search-even-odd-pruning.html
==============================================================
0 0
原创粉丝点击