zoukankan      html  css  js  c++  java
  • Search中的剪枝-奇偶剪枝

    设有一矩阵如下:
    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 但是要求时间是偶数的,都可以直接判断不可达!

    比如有一地图:

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

    要求从S点到达D点,此时,从S到D的最短距离为s = abs ( dx - sx ) + abs ( dy - sy )。

    这里插入:abs()与babs()的区别

      abs()主要是用来求整数的绝对值,在 <stdlib.h >或  <cstdlib> 中;

      babs()主要是用来精度要求更高的 float , double 的绝对值,在 <cmath> 中,

      C++可以在 <cmath> 中都可以调用。

    如果地图中出现了不能经过的障碍物:

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

    此时的最短距离s' = s + 4,为了绕开障碍,不管偏移几个点,偏移的距离都是最短距离s加上一个偶数距离。

    就如同上面说的矩阵,要求你从0走到0,无论你怎么绕,永远都是最短距离(偶数步)加上某个偶数步;要求你从1走到0,永远只能是最短距离(奇数步)加上某个偶数步。

    例题:ZOJ Problem Set - 2110 Tempter of the Bone

  • 相关阅读:
    cocos2d-x 2.2 移植wp8遇到的坑
    程序员简单却激荡的一年
    关于manacher
    关于Tarjan
    洛谷 P4013 数字梯形问题
    洛谷 P2633 Count on a tree
    洛谷 P1709 隐藏口令Hidden Password
    洛谷 P3112 后卫马克Guard Mark
    洛谷 P1174 打砖块
    洛谷1903 数颜色
  • 原文地址:https://www.cnblogs.com/astonc/p/9901376.html
Copyright © 2011-2022 走看看