迷宫问题
2016-04-05 16:28
267 查看
迷宫问题,一般的解题思路是回溯法,也就是探步穷举,每走一步之前,先试探上下左右,直到出口.
这里用递归求解:
上下左右四个方向分别用 1,2,3,4 来标志
1 置访问标志为1,试探上下左右,如果有可走的,走下一步,没有则回溯
2 下一步,又试探上下左右,重新回到步骤1
3 直到出口
这里用递归求解:
上下左右四个方向分别用 1,2,3,4 来标志
1 置访问标志为1,试探上下左右,如果有可走的,走下一步,没有则回溯
2 下一步,又试探上下左右,重新回到步骤1
3 直到出口
function DFS($visit, $m, $i, $j, $endi, $endj) { if ($visit[$i][$j] == 1) { return false; } else { $visit[$i][$j] = 1; } if ($i == $endi && $j == $endj) { return true; } if ($m[$i][$j] == 1) { return false; } else { $res1 = DFS($visit, $m, $i - 1, $j, $endi, $endj);//上 $res2 = DFS($visit, $m, $i + 1, $j, $endi, $endj);//下 $res3 = DFS($visit, $m, $i, $j - 1, $endi, $endj);//左 $res4 = DFS($visit, $m, $i, $j + 1, $endi, $endj);//右 if ($res1) echo '(' . ($i - 1) . ',' . $j . ')'; if ($res2) echo '(' . ($i + 1) . ',' . $j . ')'; if ($res3) echo '(' . ($i) . ',' . ($j - 1) . ')'; if ($res4) echo '(' . ($i) . ',' . ($j + 1) . ')'; } return true; } function lost() { $m[0] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; $m[1] = [1, 0, 1, 1, 1, 1, 1, 1, 1, 1]; $m[2] = [1, 0, 0, 1, 1, 1, 1, 1, 1, 1]; $m[3] = [1, 1, 0, 1, 1, 1, 1, 1, 1, 1]; $m[4] = [1, 1, 0, 1, 1, 1, 1, 1, 1, 1]; $m[5] = [1, 1, 0, 1, 1, 1, 0, 0, 0, 1]; $m[6] = [1, 1, 0, 1, 1, 1, 0, 1, 0, 1]; $m[7] = [1, 1, 0, 1, 1, 1, 0, 1, 0, 1]; $m[8] = [1, 1, 0, 0, 0, 0, 0, 1, 0, 1]; $m[9] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; $visit = []; DFS($visit, $m, 1, 1, 8, 8); } lost();
相关文章推荐
- java 读取文件路径空格和中文的处理
- Delphi CreateProcess
- Thinkphp验证码异步验证第二次及以后验证,验证错误----待解决
- 电量与电压 ,内阻与电压的关系;
- 2016蓝桥杯B组——NO.7
- C#实现属于自己的QQ截图工具
- awk (三剑客之一)
- ubuntu 14.04 安装opencv 3.1(包括contrib库)
- yii2 window下安装 不用composer
- hdu1160 FatMouse's Speed 【最长下降子序列+输出】
- app之间的跳转,查看URL的端口号,主机信息
- Window下用git获取chromium某版本的代码(适用于2016年4月5日)
- ♥HDOJ 1443-Joseph【约瑟夫环+规律】
- Android Studio 1.3.0 以上gradle proxy代理设置异常
- 回来看看
- 11g单机对dataguard实施
- 开发React-Native 的IDE 装的是webStorm
- Andriod 仿支付宝密码输入框
- 黄聪:No 'Access-Control-Allow-Origin' header is present on the requested resource解决办法
- 阶层查询