BFS 迷宫的最短路径问题
2015-03-30 22:07
369 查看
给点一个N*M的迷宫,再给定起点(sx,sy)和终点(gx,gy),求最短路径的长度(假设存在)。
直接BFS搜索即可。
直接BFS搜索即可。
#include<iostream> #include<queue> #define INF 9999999 using namespace std; int N, M; char maze[101][101]; typedef pair<int, int>pos; int sx, sy, gx, gy; int d[101][101]; //向四个方向转移时的坐标偏移数组 int dx[4] = { -1, 0, 0, 1 }; int dy[4] = { 0, -1, 1, 0 }; int BFS(){ queue<pos> que; for (int i = 0; i < N; i++){ for (int j = 0; j < M; j++){ d[i][j] = INF; } } que.push(pos(sx,sy)); //loop till the queue is empty while (!que.empty()){ pos p = que.front(); que.pop(); if (p.first == gx&&p.second == gy){ //end the loop while,as the road reach the end of aim break; } for (int i = 0; i < 4; i++){ int nx = p.first + dx[i]; int ny = p.second + dy[i]; if (nx >= 0 && nx < N&&ny >= 0 && ny < M&&maze[nx][ny] != '#'&&d[nx][ny] == INF){ que.push(pos(nx, ny)); d[nx][ny] = d[p.first][p.second] + 1; } } } return d[gx][gy]; } int main() { while (cin >> N >> M){ for (int i = 0; i < N; i++){ for (int j = 0; j < M; j++){ cin >> maze[i][j]; } } cout << BFS() << endl; } return 0; }
相关文章推荐
- poj 3984迷宫问题(bfs求最短路径 类似并查集保存上个节点 保存最短路径)
- 迷宫问题之最短路径bfs
- BFS解迷宫问题,并打印最短路径
- POJ 3984---迷宫问题(BFS,迷宫最短路径且输出路径)
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- 迷宫最短路径问题-BFS
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- POJ-3984迷宫问题(典型BFS找最短路径)
- POJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- 回溯法-bfs--迷宫问题的最短路径
- OJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
- 迷宫最短路径问题(BFS)
- 重学搜索yi.3:迷宫的最短路径--bfs
- K - 迷宫问题 POJ 3984 BFS路径输出
- poj 迷宫问题(路径记录)(DFS,BFS)
- BFS循环求迷宫最短路径及路径数
- POJ 3984 迷宫问题 手写队列+BFS路径输出
- 关于栈与递归求解迷宫与迷宫最短路径问题
- BFS和DFS的差别,BFS实现迷宫最短路径