热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据结构—迷宫问题

迷宫问题_____________________________________________问题描述:给定一个二维数组如下所示,数值1位墙壁,0
迷宫问题
_____________________________________________



问题描述:给定一个二维数组如下所示,数值1位墙壁,0为可以走的通路,要求找到出口位置,并且找到最短的路径.




int arr[10][10] =
{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1, 1, 1, 0, 1, 1, 1, 0, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 0, 0, 1, 1
};














解决思想:




其实突然拿到该题真的无处下手,我们首先找到最短路径的时候首先就要走完通向出口的每一条路,但是我们走过的路




怎么样才能退回来呢?? 这个时候我们就要用试探法和回溯法合并使用了. 具体如何使用呢?? 来看下面这个图.













具体思想有了,然后现在呢我们思考一些细节的问题. 




首先我们怎么样避免走回头路呢? 这个很容易想到就是对你走过的路程做一个标记. 然后每走一次将这个位置的数值置为




所走的步数,以后试探的时候,只需要判断下一个节点是否为0,或者它的数值是否大于自己,如果大于自己那么就继续走,




如果小于自己的值那么那个节点一定会是回头路. 所以这样的方法可以解决如下这种问题:




int arr[10][10] =
{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 1, 1, 1, 1
};





大致思想已经明白了,最重要的代码实现如下:







代码实现:




#include
#include
#include
#include
using namespace std;struct pos
{pos(int i,int j):row(i),col(j){}int col;int row;
};template
class maze
{
public:maze(int array[M][N]){for (int i &#61; 0; i p.size()){cout <<"找到一个出口为" <<"[" <&#61; 0 && next.row &#61; 0 && next.col <&#61; N)&& (arr[next.row][next.col] &#61;&#61; 0 || arr[cur.row][cur.col] " < p;stack q;
};void Test()
{int arr[10][10] &#61;{1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1,0, 0, 0, 0, 0, 0, 0, 0, 0, 1,1, 1, 1, 0, 1, 1, 1, 1, 0, 1,1, 1, 1, 0, 1, 1, 1, 1, 0, 1,1, 1, 1, 0, 0, 0, 0, 0, 0, 1,1, 1, 1, 1, 1, 0, 1, 1, 1, 1,1, 1, 1, 1, 1, 0, 1, 1, 1, 1,1, 1, 1, 1, 1, 0, 1, 1, 1, 1,1, 1, 1, 1, 1, 0, 1, 1, 1, 1};maze<10,10> arr1(arr);arr1.print();arr1.getmazepath(pos(2,0),1);arr1.print();arr1.printminmazepath();system("pause");
}

运行结果&#xff1a;




















推荐阅读
author-avatar
我财我乐汽车869
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有