• 走迷宫(深度优先遍历)


    ●问题描述:

      给出一个矩阵,其中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 }
  • 相关阅读:
    Controlling behavior of existing services in system
    获取站点路径方法
    如何处理DataTable.Select();执行后重新排序的问题!
    ASP.NET 2.0 编程珠玑之五调试已创建好的代码
    Meal Scheduler in C#
    DHTML+Ajax? MXML+ActionScript? XAML+C#? 是巧合,还是必然?
    C#验证输入的是否数字
    Monitoring System Usage using Windows Service
    ADO.NET 2.0中的DataSet和DataTable
    使用asp.net 2.0和SQL SERVER 2005构建多层应用
  • 原文地址:https://www.cnblogs.com/573583868wuy/p/7290745.html
Copyright © 2020-2023  润新知