迷宫问题

迷宫问题,一般的解题思路是回溯法,也就是探步穷举,每走一步之前,先试探上下左右,直到出口.

这里用递归求解:

上下左右四个方向分别用 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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值