码迷,mamicode.com
首页 > 其他好文 > 详细

深度优先搜索[奥数等式、迷宫找人]

时间:2015-01-29 12:45:57      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:深度优先搜索   深度优先遍历   dfs   奥数等式   迷宫   

上一节我们用暴力枚举解决奥数等式技术分享,虽然简单,但是很蛋疼。

http://blog.csdn.net/wtyvhreal/article/details/43267867


这一节讲用深搜的方式解决,高大上。


深度优先搜索(Depth First Search,DFS),理解深搜的关键在于解决“当下该如何做”。至于“下一步如何做”则与“当下该如何做”是一样的。通常的方法就是把每一种可能都是尝试一遍。当前这一步解决后便进入下一步。下一步的解决方法和当前这步的解决方法是完全一样的。深搜的基本模型:

void dfs(int step)
{
     判断边界
     尝试每一种可能 for(i=1;i<=n;i++)
     {
          继续下一步 dfs(step+1);
     }
     返回
}

现在想想奥数等式的解决方法。

这就相当于手中有1~9张扑克牌,放到9个盒子里,并使得等式成立。

技术分享

技术分享

技术分享


下面利用DFS解决迷宫找人问题。

情景分析,n行m列单元格组成(n,m都小于等于50),每个单元格要么是空地,要么是障碍物,任务是帮助小哼找到一条从迷宫的起点通往小哈所在位置的最短路径。注意障碍物是不能走的,当然小哼也不能走到迷宫之外。

技术分享


基本思路:

二维数组存储这个迷宫,小哼起点(1,1),小哈在(p,q)。找一条从(1,1)到(p,q)的最短路径。小哼开始只能往右走或者往下走,只能一个个去尝试。我们可以先让小哼往右边走,直到走不通的时候再回到这里,再去尝试另外一个方向。规定按照顺时针方向来尝试(按照右、下、左、上的顺序去尝试)。深搜就是一趟搜到底,没找到返回继续搜。

技术分享

技术分享

技术分享

技术分享

技术分享


n表示行,m表示列,0表示空地,1表示障碍物,最后一行4个数,迷宫入口坐标,后两个为小哈坐标。

技术分享


运行结果为:

技术分享

深度优先搜索[奥数等式、迷宫找人]

标签:深度优先搜索   深度优先遍历   dfs   奥数等式   迷宫   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/43268115

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!