一、

关于奇偶剪枝

1、

首先举个例子,有如下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的奇偶性与最短距离的奇偶性不一致,那么我们就可以直接判定这条路线永远不可达了


2、引图举例

(1)、

现假设起点为(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;

反之亦反。


(2)、

还是以这个为例子吧,现在我把矩阵填满 0 和 1 [1]

0

1

0

1

0
1

0

1

0

1

0

1

0 1 0

1

0 1 0 1

0

1

0

1

0

我们现假设从 0 开始走,则不难证明,

从任意 0 走到任意 1 始终是奇数步;

从任意 0 走到任意 0 始终是偶数步;

引用描述里的“例子”, s 到 e 的最短步数为 t (当然你也可以理解成此时到终点刚好剩余 t 步等等)。

则,我们从 s 到 e 的步数之和(或者说总距离)总可以表示成    sum= t + extra ( extra>=0 ),其中 extra 表示额外的步数。

如:

s

 
 

+

 

|

+

     

|

       

+

e

此时 t=8,sum=14,所以我们容易得到 extra=6。也就是说按照这个走法,需要在最短的步数上再走额外的 6 步(先不用太在意这些偏移是在什么地方产生的)。

又如:

s

 
 

+

 

|

+

     

|

  + e

+

   

此时,t=7,sum=15,所以我们也容易得到 extra=8。


(3)、

根据理科生的天性,由这两个一般性的例子,我们很容易嗅察到 extra 都为偶数。先带着疑惑,

再来看我给的 0 、1 矩阵。

0

1

0

1

0
1

0

1

0

1

0

1

0 1 0

1

0 1 0 1

0

1

0

1

0

设左上角坐标为(1,1),右下角坐标为(5,5).

那么我们给的例1,

起点 s 的坐标为(1,1),此点为“0”;

终点 e 为(5,5),此点为“0”。

所以    t=8,为偶数。

现在我们再倒过来看,从终点(也就是 e )出发,把最短步数 t=8 耗费掉,不妨这样走,

s

      +
     

+

      |  
    +  
   

e

如图所示从 e (5,5)耗费 8 步走到了(1,5)点。

因为是从 0 走偶数步,所以走到的坐标也一定是 0 ,就像这里的(1,5)点是 0 一样。

这是一个递归的过程,首先如果从0开始,目的地也是0,那么其中的最短距离 t 必然是个偶数,可其中有可能有障碍物或需要绕弯的情况,那么我们就现将最短距离 t 用于绕弯,从开始的0,走t步不管怎么走都只能到0,而这个0到终点0的最短路径t也必然是偶数,一直递归下去,直到你绕够了到达终点,这中间你额外的步数都是偶数。

注意到,(1,5)点和起点 s (1,1)都是 0,也就是说,这个 extra 必然是偶数!

再看例2,同样从终点 e 开始耗费 t=7 步,

则所到的点一定是 0 (不管它在哪里),再从这个点回到起点 s ,所用的 extra 也必然是个偶数!

所以无论如何,sum= t + extra ( extra>=0 ) 中的 extra 都是一个偶数

那么我们就可以用公式 t-[abs(ex-sx)+abs(ey-sy)] 计算出extra是否为偶数来判断当前点能否恰好在这么多步到达终点了。

以上来自百度百科

搜索技巧——奇偶剪纸相关推荐

  1. 最值得一看的几条简单的谷歌 Google 搜索技巧!

    可能你和我一样,几乎每天都必须与搜索引擎打交道,不过很多时候,你辛辛苦苦搜了半天也没找到合适的资料,然而"高手们"上来一眨眼功夫就能命中目标了.这并不是别人运气好,而是搜索引擎其实 ...

  2. Google和Baidu常用的搜索技巧--转

    原文链接:http://mp.weixin.qq.com/s?__biz=MjM5NTY0MTY1OQ==&mid=2654509772&idx=1&sn=754454e374 ...

  3. 实用的 GitHub 仓库搜索技巧

    前言 我们经常在 GitHub 上学习开源项目,但是 GitHub 众多的仓库总是会让我们眼花缭乱,不能在较短的时间里找到自己想要的项目. 这里分享一下我刚学到的 GitHub 仓库搜索技巧,在记录所 ...

  4. 百度超级搜索技巧集锦

    1."开始连接"."正在连接"搜索免费电影 网络上有很多热心人提供免费电影的下载地址.为了表明真实可靠,把下载过程也同时附上.现在最流行的下载工具是flashg ...

  5. github搜索技巧:快速搜到你想要的!

    前言 不得不说 GitHub 简直就是程序猿的福地,聚集了众多大神在上面分享,在这里可以发现无限的优良资源,不管是初学者还是正在进阶中的青铜王者,都可以在上面找到适合自己的好东西,用好 GitHub ...

  6. 案例 github_github 项目搜索技巧-让你更高效精准地搜索项目

    作者:Suwanbin www.cnblogs.com/suwanbin/p/12113751.html github 搜索技巧 参考自 B站 up 主 CodeSheep 的视频[如何高效地在网上找 ...

  7. 成为高效程序员的几大搜索技巧

    对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序.如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码.即使是经验丰富的程序员,通常也会为了节省时间和精力而在网上搜索解决方案. 如果 ...

  8. 如何使用搜索技巧来成为一名高效的程序员

    没有人是完全独立的孤岛,每个人都是整体的一部分.-- 约翰·多恩 对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序.如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码.即使是经验丰 ...

  9. github搜索技巧_和逛知乎、刷微博一样高效使用 GitHub

    自打毕业之后,可以说每天打开 Github 或Email 看有没有 watch 项目的消息或者自己项目的 issue,然后在Explore 看看社区内项目的走势,紧接着开始写代码搬砖的工作,偶尔也会关 ...

最新文章

  1. python统计特定类型文件数量_分享一些常见的Python编程面试题及答案
  2. html footer 布局,详解CSS经典布局之Sticky footer布局
  3. winform中捕获程序未处理的所有异常
  4. java开头流程_【java读书笔记】——java开篇宏观把控 + HelloWorld
  5. Understanding JVM Internals---不得不转载呀
  6. 一文贯通python文件读取 1
  7. javaWEB总结(9):自定义HttpServlet
  8. centos安装最新版的docker-ce(二进制安装)
  9. Xml序列化、反序列化帮助类
  10. html标记语言 --超链接
  11. !!终于把【库存管理的大致功能完成了!】
  12. python 三色球问题
  13. ASP.NET mvcConf Videos Available
  14. 四叉树lod结合灯塔AOI
  15. TCP 协议面试灵魂 12 问(二)
  16. 2023陆军工程大学计算机考研信息汇总
  17. 如何低成本化实时网络摄像头监控直播?
  18. Android动画之Tween Animation
  19. ICE之——IceGrid负载均衡部署
  20. .NET Core解决MVC视图中的中文被html编码的问题

热门文章

  1. node.js学习笔记Day3
  2. 化繁为简,我用”知晓推送”开发微信小程序订阅消息
  3. Bootstrap3基础 table-striped 表格实现隔行换色(浅灰色与白色交替)
  4. 运用计算机计算电力系统潮流,潮流电力系统论文,关于电力系统潮流计算现状展望相关参考文献资料-免费论文范文...
  5. 搜狗如何打特殊符号 - 搜狗特殊符号的打法!!
  6. 这几个群,程序员可千万不要进!
  7. 四和能聚分析做直播带货的商家通常发布什么类型的短视频
  8. 计算机U盘那种好,u盘什么主控好,u盘主控比较
  9. mysql购买服务_云数据库MySQL购买须知
  10. 易岸公考:国考公务员高频常识