POJ3984 迷宫问题(BFS)
2014-08-13 08:30
344 查看
【题目简述】:中文题目不再赘述。
http://poj.org/problem?id=3984
【分析】:既然求的是迷宫的最短路径,那最好的工具就是BFS,因为可以把已走过的路标记为1,这样使用BFS求得的就是最短的路径,其后我们只需要用一个数组来记录此时我们所走的点的前一个点,以此类推最后完整的描绘出这条路径。
参考:http://www.cnblogs.com/yueshuqiao/archive/2011/08/22/2149902.html
详见代码:
http://poj.org/problem?id=3984
【分析】:既然求的是迷宫的最短路径,那最好的工具就是BFS,因为可以把已走过的路标记为1,这样使用BFS求得的就是最短的路径,其后我们只需要用一个数组来记录此时我们所走的点的前一个点,以此类推最后完整的描绘出这条路径。
参考:http://www.cnblogs.com/yueshuqiao/archive/2011/08/22/2149902.html
详见代码:
//240k 0Ms #include<iostream> using namespace std; int map[5][5]; int dx[4]={1,-1,0,0}; int dy[4]={0,0,-1,1}; int front=0,rear=1; struct node{ int x,y,pre; }q[100]; void print(int i)//输出过程 { if(q[i].pre!=-1) { print(q[i].pre); cout<<"("<<q[i].x<<", "<<q[i].y<<")"<<endl; } } void bfs(int x1,int y1)//广搜 { q[front].x=x1; q[front].y=y1; q[front].pre=-1; while(front<rear)//当队列不空 { for(int i=0;i<4;i++)//搜索可达的路径 { int a=dx[i]+q[front].x; int b=dy[i]+q[front].y; if(a<0||a>=5||b<0||b>=5||map[a][b])//是否在迷宫内,是否可行 continue; else { map[a][b]=1; //走过的路做标记 q[rear].x=a; q[rear].y=b; q[rear].pre=front; rear++; //入队 } if(a==4&&b==4) print(front); } front++;//出队 } } int main() { int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) cin>>map[i][j]; cout<<"(0, 0)"<<endl; bfs(0, 0); cout<<"(4, 4)"<<endl; return 0; }
相关文章推荐
- POJ3984 迷宫问题 BFS
- poj3984 迷宫问题(图-BFS)
- poj3984 迷宫问题 bfs
- poj3984迷宫问题BFS
- POJ3984 迷宫问题【BFS】
- poj3984 迷宫问题(BFS)
- poj3984迷宫问题(bfs)
- POJ3984 迷宫问题(BFS)
- POJ3984 迷宫问题【BFS】
- poj3984迷宫问题 bfs
- POJ3984 迷宫问题【水BFS】
- poj3984-迷宫问题(BFS)
- POJ3984 迷宫问题 (BFS与路径记录)
- POJ3984 迷宫问题(深搜DFS+广搜BFS)搜索记录坐标,坑
- POJ3984 迷宫问题 BFS
- poj3984 迷宫问题(BFS)
- H - 迷宫问题 POJ3984 (BFS+DFS)
- 迷宫问题---poj3984(bfs,输出路径问题)
- POJ3984 迷宫问题(BFS)
- poj3984(bfs迷宫问题)