dfs 奇偶剪枝

什么是奇偶剪枝?

把矩阵看成如下形式:
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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值