基于PHP回溯法求解迷宫问题的详细方案

基于PHP回溯法求解迷宫问题的详细方案
本文介绍了一种基于回溯法的php实现迷宫问题的方法,供大家参考

介绍

最近,我看到leetcode一些算法问题。他们中的一些人看着一些非常简单和非常常见的东西。他们想不出如何解决它在任何时间,例如,实现sqrt函数发现阵列排列。如果数学不好,这些看似简单的问题,遇到的第一个要解决的,感觉很难的课程,这是解决迷宫问题的所有解决方案,采用回顾性的方法解决这个问题,不明白的想法,许多更复杂的问题是困难的。

问题描述

这个问题真的是在徘徊的时候遇到的,具体在哪里我不记得了。

一千一百一十一

0101

0101

0111

以上是一个迷宫,左上角是入口,右下角是出口,小可爱(是的,你没看错,是肖明长的草)从入口,逃生出口(1小时不会被人X,1逸说怪物)可以通过,0表示没有过去,只有右下两方向,找出所有可能的逃跑路线,小可爱。

这个问题看起来很简单,你可以看到答案,但是把这个想法转换成代码,不知道从哪里开始。

如何解决

解决这个问题的一种方法是回溯。首先,看看回溯的定义(百度百科)。

回溯法(探索法和回溯法)是一种最优搜索方法,也称为探索法,即寻找最优条件以达到目标,但当我们探索某一步时,发现原来的选择并不理想或达不到目的。然后我们回到第一步,选择它。回到我们将要返回的技术是不可行的。

我的思维方式:

1。坐标迷宫上方,左上角是(0,0),右下角是(3,3),和其他点分散在坐标系统

2。从(0,0)

三.从给定坐标点开始,先搜索右边,1继续,向下搜索0,搜索当前搜索坐标之前搜索。

4。当坐标为(3,3),它是一种回溯点,这个时间也回来了。

5。只要我们不越过边界,重复第三个步骤

看看我的PHP实现:
< PHP
$号= {
{ 1,1,1,1,1,1 },
{ 0,1,0,1,0,1 },
{ 0,1,0,1,0,1 },
{ 0,1,1,1,1,1 }
};
功能getret($数据,X,Y元,$结果= {},$记录)
{
快照美元= { };
美元=计数(数据)- 1;
$ YL =计数($数据{ 0 })- 1;
如果(X Y | | > > XL美元美元YL){
没有空间/跑出去进入迷宫,这样的事情是不会发生的。
返回;
}
如果(数据{ $ x } $ y = } = 0){
向前移动0个/秒,返回前一个状态。
返回;
} elseif($ { $ X } {资料} = = 1 $ Y){
1是这种情况,在正向搜索中找到了当前路径的最新坐标。
如果到出口,并记录返回的答案
快照= array_merge美元(美元纪录,{ { $ X,Y元} });
如果(X = = y = =美元美元美元XL YL){
结果{ } = array_merge美元(美元纪录,{ { $ X,Y元} });
返回;
}
{人}
返回;
}
必须进行搜索
这里是$ / /快照保存当前搜索位置,等到下一次回到这里将使用
getret($数据,X元,+ + Y元,美元美元的结果,快照);
/向下搜索
getret($数据,+ + $ X,Y美元,导致美元美元,快照);
}

$结果{ };
getret($号,0, 0美元,因此,{ });
foreach($结果达POS){
foreach($ POS为XY){
返回({ $ 0 { } },{ $ 1 } })>;
}
结尾;
}

输出结果
(0,0)(0,1)(0,2 = > > > >)(0,3)(0,4)(0,5)(1 = > > > >)(2,5)(3,5)= >结束
(0,0)(0,1)(0,2 = > > > >)(0,3)(1,3)(2,3)(3,3 = > > > >)(3,4)(3,5)= >结束
(0,0)(0,1)(1,1 = > > > >)(2,1)(3,1)(3,2)(3,3 = > > > >)(3,4)(3,5)= >结束

关于PHP相关内容的更多读者感兴趣的读者可以看到特别站:PHP数据结构和算法教程

希望本文能对PHP程序设计有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部