回溯法解决迷宫搜索问题
2017-03-31 14:45
190 查看
算法思路:定义一个二维数组,其中的0代表通路,1代表墙,然后定义一个结构体表示每一个节点的属性,struct St //定义一个栈,保存路径
{
int i; //当前方块的行号
int j; //当前广场的列号
int di; //di是下一可走方位的方位号
}
然后定义一个栈来存储节点。
{
int i; //当前方块的行号
int j; //当前广场的列号
int di; //di是下一可走方位的方位号
}
然后定义一个栈来存储节点。
#include <iostream> #include <iomanip> #include <stdlib.h> using namespace std; //用栈实现路径的存储 #define MaxSize 100 int mg[10][10] = { //定义一个迷宫,0表示通道,1表示墙 {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,1,0,0,1,0,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,0,0,1,1,0,0,1}, {1,0,1,1,1,0,0,0,0,1}, {1,0,0,0,1,0,0,0,0,1}, {1,0,1,0,0,0,1,0,0,1}, {1,0,1,1,1,0,1,1,0,1}, {1,1,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1}}; struct St //定义一个栈,保存路径 { int i; //当前方块的行号 int j; //当前广场的列号 int di; //di是下一可走方位的方位号 } St[MaxSize]; //定义栈 int top = -1; //初始化栈指针 void MgPath(int xi, int yi, int xe, int ye) //路径为从(xi,yi)到(xe,ye) { int i, j, di, find, k; top++; //初始方块进栈 St[top].i = xi;St[top].j = yi;St[top].di = -1; mg[xi][yi] = -1; while(top>-1) //栈不为空时循环 { i = St[top].i;j = St[top].j;di = St[top].di; if(i==xe && j==ye) //找到了出口,输出路径 { cout << "the road this"<<endl; for(k=0; k<=top; k++) { cout << " (" << St[k].i << "," << St[k].j << ")"; if((k+1)%5==0) cout << endl; //每输出五个方块后换一行 } cout << endl; return; } find = 0; while(di<4 && find==0) //找下一个可走方块 { di++; switch(di) { case 0:i = St[top].i-1; j = St[top].j; break; case 1:i = St[top].i; j = St[top].j aaec +1; break; case 2:i = St[top].i+1; j = St[top].j; break; case 3:i = St[top].i; j = St[top].j-1; break; } if(mg[i][j]==0) find = 1; //找到通路 } if(find==1) //找到了下一个可走方块 { St[top].di = di; //修改原栈顶元素的di值 top++; //下一个可走方块进栈 St[top].i = i; St[top].j = j; St[top].di = -1; mg[i][j] = -1; //避免重复走到这个方块,这一步相当关键,走过的路径要设置成-1. } else //没有路可走,则退栈 { mg[St[top].i][St[top].j] = 0; //让该位置变成其它路径可走方块 top--; //回退到上一个位置 } } cout << "there is no road!/n"; } int main() { MgPath(1,1,8,8); }
相关文章推荐
- 堆栈解决迷宫搜索问题
- scala 广度优先搜索解决迷宫问题
- Java利用回溯思想解决迷宫问题(寻找最短路径)
- 九度OJ 教程86 广度优先搜索解决迷宫问题之《胜利大逃亡》
- BFS-迷宫问题-用宽度(广度)优先搜索解决最优路径问题
- 广度优先搜索解决迷宫问题
- C语言链栈以及回溯算法解决迷宫问题
- 迷宫问题解决方法:分别基于深度搜索和广度搜索的思想来实现
- 宽度搜索解决迷宫问题
- BFS-迷宫问题-用宽度(广度)优先搜索解决最优路径问题
- 迷宫问题解决方法:分别基于深度搜索和广度搜索的思想来实现
- 搜索练习3 /poj.org/problem 3984 迷宫问题/bfs 回溯找路经
- Lucene搜索结果排序问题(按时间倒序排的替代解决方法)
- ssh2环境下的hibernate搜索中文乱码问题解决
- A STAR +dijkstra搜索 解决k短路径问题
- PCWorld:微软Google进军社交搜索需解决八问题
- 历时三天,圆满结束google搜索,解决ubuntu的不能上网问题。
- 解决MOSS搜索问题
- 回溯法解迷宫问题的两个解法
- 使用非递归算法解决迷宫问题