迷宫问题dfs
2015-04-08 10:05
211 查看
<pre name="code" class="cpp">/*迷宫问题 栈作为深度优先遍历(dfs):采用的搜索方法的特点是尽可能先对纵深方向进行搜索 可以最快的找到解 */ #include<stdio.h> #define M 8 #define N 8 #define MaxSize 1000 typedef struct { int i; int j; int di;//下一步要走的方向 }Box; typedef struct { Box data[MaxSize]; int top; }StType;//迷宫问题常用结构体 int mg[M+2][N+2]= { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,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} }; StType st; void f(int top) { if(top>0) { f(top-1); } printf("(%d,%d)\t",st.data[top].i,st.data[top].j); mg[st.data[top].i][st.data[top].j]=0; } int mgpath(int xi,int yi,int xe,int ye) { int i,j,di,flag; st.top=-1; st.top++; st.data[st.top].i=xi; st.data[st.top].j=yi; st.data[st.top].di=-1; mg[xi][yi]=-1; while(st.top>-1) { i=st.data[st.top].i; j=st.data[st.top].j; di=st.data[st.top].di; if(i==xe&&j==ye) { f(st.top); return 1; } else { flag=0; while(di<4&&flag==0)//深度搜索 { di++; switch(di) { case 0: i=st.data[st.top].i-1; j=st.data[st.top].j; break; case 1: i=st.data[st.top].i; j=st.data[st.top].j+1; break; case 2: i=st.data[st.top].i+1; j=st.data[st.top].j; break; case 3: i=st.data[st.top].i; j=st.data[st.top].j-1; break; } if(mg[i][j]==0) flag=1; } if(flag==1) { st.data[st.top].di=di; st.top++; st.data[st.top].i=i; st.data[st.top].j=j; st.data[st.top].di=-1; mg[i][j]=-1; } else { mg[st.data[st.top].i][st.data[st.top].j]=0; st.top--; } } } return 0; } int main() { mgpath(1,1,M,N); return 0; }
相关文章推荐
- 迷宫问题:hdoj1010 DFS--剪枝实现
- ACM水题-Rescue LK(AC,迷宫问题,DFS求解)
- 罗密欧与朱丽叶的迷宫问题_dfs
- 迷宫问题DFS
- SDUT1157:小鼠迷宫问题(bfs+dfs)
- POJ 2251 (三维迷宫问题) DFS /BFS
- 迷宫问题一 找到迷宫的一条路径(DFS+回溯)
- ytu 1980:小鼠迷宫问题(DFS 深度优先搜索)
- 小鼠迷宫问题【sdut1157】【dfs,bfs综合题目】
- 迷宫问题(八个方向寻找)DFS
- (dfs+bfs+记录)迷宫问题(P3984)
- [置顶] 模拟求解迷宫问题(DFS+BFS)
- 模拟求解迷宫问题(DFS+BFS)
- BFS 、DFS 解决迷宫入门问题
- poj 3984 迷宫问题 dfs 求迷宫路径
- The problem of maze(经典迷宫问题) DFS版
- 经典迷宫问题DFS
- poj3984(DFS写法) 迷宫路径问题
- FZU1205/SDUT1157_小鼠迷宫问题(DFS+BFS)
- FZU - 1205 小鼠迷宫问题 (bfs+dfs)