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

  • 相关阅读:
    java枚举enum
    冒泡排序、选择排序、插入排序、二分法排序、快速排序、二叉树排序、堆排序总结
    Django-tinymce富文本的使用
    Redis-基本操作总结
    git-总结大全
    css-总结
    html-table布局
    html表单示例
    html总结
    python-浅拷贝、深拷贝实例以及讲解
  • 原文地址:https://www.cnblogs.com/astonc/p/9901376.html
Copyright © 2011-2022 走看看