奇偶剪枝

 奇偶剪枝详解

 以下内容转自等  百度百科:

  

   奇偶剪枝是数据结构的搜索中,剪枝的一种特殊小技巧。
现假设起点为(sx,sy),终点为(ex,ey),给定t步恰好走到终点,

 

s
    
|
    
|
    
|
    
+
e
如图所示(“|”竖走,“—”横走,“+”转弯),易证abs(ex-sx)+abs(ey-sy)为此问题类中任意情况下,起点到终点的最短步数,记做step,此处step1=8;

 

s
 
 
+
 
|
+
   
|
    
+
e
如图,为一般情况下非 最短路径的任意走法举例,step2=14;
step2-step1=6,偏移路径为6,偶数(易证);

结论

推广之,若 t-[abs(ex-sx)+abs(ey-sy)] 结果为非偶数(奇数),则无法在t步恰好到达;
返回,false;
反之亦反。
 
         其实如果不能理解原理的话,能够记住结论也是不错的选择,这个结论的意思是说
给定T秒让到达,减去最短的路径,所多走的路程一定是一个偶数,原因是很简单,因为每横着或竖着多走,都必然要走回来,不可能一直偏下去,所以   * 2,是个偶数啦。
    
       那么在hdu1010中的奇偶剪枝是如何利用的呢,下面解释一下》
 
       给定时间为   t,  所已走的路程是step, 则其剪枝的两行代码是
 
      t-step-(abs(ex-sx)+abs(ey-sy))<0
     return 0;
     t-step-(abs(ex-sx)+abs(ey-sy))是个奇数
    return  0;
 
   第一句中,如果等于0时,t-step相当于给定步数,因为步数常变的,而且每到一点都当做是起点,所以等于0时就已经是说明给定的步数和最短路一样了,不能再小了
 
 
   第二句中,多余的步数是个偶数,所以是奇数肯定是错的嘛,哈哈,怎么样,会了吧
  
 
    
 
 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值