DFS之奇偶性剪枝

奇偶剪枝

【问题描述:】

给定一个N*M的迷宫以及起点和终点,迷宫中有一些障碍无法穿过,问能否不重复也不停留地在刚好一共走T步出迷宫。

 

【问题分析:】

先来看下这张图片:

 

也就是说当要走偶数步而规定的步数是奇数,或者要走奇数步而规定的步数是偶数,都是不可能到达的,如果要想到达,则要走的步数和规定的步数的奇偶性应该一致。又可知,奇偶性一致的两个数的差或者和都是偶数。(下面有大用处)

 

例如下图:设S点坐标为(sx,sy),D点坐标为(dx,dy),.表示通路,X表示障碍。

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

可知从S走到D的最短距离为abs(sx-dx)+abs(sy-dy)

S..X

..XX
.X.X
...D

上面这个迷宫中存在一些障碍,假设当前已走step步,则还剩下t-step步,设当前点到终点的最短距离为abssi - dx+ abs(sj - dy),则两者的奇偶性一定一致的(由上面那段话可知)并且前者一定大于等于后者(剩下要走的步数大于等于该坐标到终点的最短距离),只有这样,才能够到达。也就是tem = t – step – (abssi - dx+ abs(sj - dy))tem >= 0 && tem % 2 == 0.

 

下面给出一道例题:

http://acm.hdu.edu.cn/showproblem.php?pid=1010

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值