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

迷宫探路问题

时间:2015-11-01 01:37:05      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

目的:找出一条可达的路,有两种方法实现。

第一种:非递归方法

此方法需用到栈结构,可使用STL,将当前周围有其他未到达过的顶点的顶点压入栈中,保持栈顶一直是当前顶点。

当栈顶顶点周围无可达顶点时,就将该顶点弹出,一直循环到找到目的地或栈空,若到达,则将栈中点全部打印出就是一条路,若栈空,则无路可到达目的地。

1000001000
0100101000
0101101000
1000001100
0110101000
1010010000
0101000000
0100111000
0010001100
0001100111

地图如图,‘1’表示可达,‘0’表示不可达,但需要先将图周围添加一层不可达的点,目的是避免检查下标越界,若不想改变地图,还需另加一个标志矩阵flagmap

 1 int stackrealize(const int row,const int col)
 2 {
 3     while(!ps.empty()){
 4         point cur = ps.top();
 5         int flag = 0;
 6         for(int i=0;i<8;i++){
 7             point p = cur+dir[i];
 8             if(!flagmap[p.x][p.y] && map[p.x][p.y]==1){
 9                 flag = 1;
10                 cur=p;
11                 flagmap[p.x][p.y] = 1;
12                 ps.push(cur);
13                 if(cur.x==row && cur.y==col){
14                     cout<<ps<<endl;
15                     return 1;
16                 }
17                 break;
18             }
19         }
20         if(!flag)ps.pop();
21     }
22     return 0;
23 }

这里point是一个结构体类型:

1 struct point{
2     int x,y;
3     point(){};
4     point(int xx,int yy){x=xx;y=yy;};
5     point operator + (point p){
6         return point(x+p.x,y+p.y);
7     }
8 }way[MAXN*MAXN];

分析:最后保留在栈里面的都是可达目标点的。

第二种:递归方法。

比较简单,直接粘代码:

 1 int BFS(point &cur,const int row,const int col)
 2 {
 3     if(cur.x==row && cur.y==col){
 4         way[len] = cur;
 5         return 1;
 6     }
 7     int flag = 0;
 8     for(int i=0;i<8;i++){
 9         point tem = cur + dir[i];
10         if(flagmap[tem.x][tem.y]==0 && map[tem.x][tem.y]==1){
11             flag = 1;
12             flagmap[tem.x][tem.y] = 1;
13          )  if(BFS(tem,row,col))way[len++] = tem;
14             break;
15         }
16     }
17     return flag;
18 }

需要注意的是,要想打印路径,递归函数就要带返回标志,意思是,如果该点最终在要打印的路上,就返回1,否则返回0(可以看着地图模拟一下)。

 

迷宫探路问题

标签:

原文地址:http://www.cnblogs.com/WindInWillows/p/4923184.html

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