zoukankan      html  css  js  c++  java
  • 走迷宫(深度优先遍历)

    ●问题描述:

      给出一个矩阵,其中0表示通路,1表示墙壁,这样就形成了一个迷宫,要求编写算法求出其中路径。

    ●递归思路:

      编写一个走迷宫函数,传入二位数组的下标,先假设该点位于最终路径上(将0置为3)再探测周围四个点是否可以走通(是否为0),如果可以走通则将该点四周能走通的点作为函数参数传入函数进入递归。若四周均不能走通(都不为0时)则将该点置回0表示该点不是最终路径上的点。

      在此思路中递归进入时表示了枚举路径,当发现此条路径走到某处再不能走通时就将路径该点置回0并且递归退出(回溯)寻找下一条可走通路径。

    ●代码:

     1 <?php
     2 //深度优先遍历
     3 $maze = array(
     4     array(0,0,0,1),
     5     array(0,1,0,1),
     6     array(0,0,0,1),
     7     array(1,1,0,0),
     8 );
     9 
    10 function search($i, $j, $maze)
    11 {
    12     //下、右、上、左
    13     $fx = array(1,0,-1,0);
    14     $fy = array(0,1,0,-1);
    15     for($k=0;$k<4;++$k)
    16     {
    17         $newx = $i + $fx[$k];
    18         $newy = $j + $fy[$k];
    19         
    20         //如果不是墙,且没有走过
    21         if($newx>=0&&$newx<4&&$newy>=0&&$newy<4&&0==$maze[$newx][$newy])
    22         {
    23             $maze[$newx][$newy] = 3;
    24             if(3 == $newx && 3 == $newy)
    25             {
    26                 show($maze);
    27                 $maze[$newx][$newy] = 0;
    28             } else {
    29                 search($newx, $newy, $maze);
    30             }
    31         }
    32     }
    33     //回溯的时候将此点标记为未访问,这样下一个路径也可以访问
    34     $maze[$i][$j] = 0;
    35 }
    36 
    37 show($maze);
    38 $maze[0][0] = 3;
    39 search(0, 0, $maze);
    40 /**
    41  * 打印迷宫
    42  */
    43 function show($info)
    44 {
    45     foreach($info as $value)
    46     {
    47         foreach($value as $v)
    48         {
    49             echo $v . "	" ;
    50         }
    51         echo "<br/>";
    52     }
    53     echo "<br/><br/><hr/><br/><br/>";
    54 }
  • 相关阅读:
    利用自定义 ORM 下使用 flask-login 做登录校验使用笔记
    element-ui + vue + node.js 与 服务器 Python 应用的跨域问题
    js显示对象所有属性和方法的函数
    zookeeper 简单小节
    安装Python到Linux(Pyenv)
    安装Sonarqube到CentOS(YUM)
    安装PostgreSQL到CentOS(YUM)
    安装vsFTP到CentOS(YUM)
    安装Zabbix到Ubuntu(APT)
    安装Zabbix到CentOS(YUM)
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/7290745.html
Copyright © 2011-2022 走看看