利用BFS求最短路
2016-10-12 21:37
218 查看
利用BFS求图的最短路,
POJ3984
在这里,BFS求出了每个点到起点的最短距离
注意, 只要"某个点到起点的距离"从初始状态被赋值, 那么这个值就是最优的, 因为可以把BFS之后的图看为是一个BFS树, 某点的所在的"层数"就是其到起点的距离, 当其被BFS第二次的时候的"层数"一定 大于或等于 第一次的"层数", 即离起点更远了
POJ3984
#define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<string.h> #include<queue> #include<algorithm> using namespace std; const int maxn = 5; struct Node { int x, y; Node(int a=0, int b=0) :x(a), y(b) {} };//node表示一个点,x为x坐标,y为y坐标 int G[maxn][maxn];//G存储的是迷宫的信息,0为障碍物 int dis[maxn][maxn];//到起点的距离 Node path[maxn][maxn];//存储此节点的“父亲” const int dir[4][2] = { { 0, 1 }, { 0, -1 }, { -1, 0 }, { 1, 0 } }; bool isleg(int x, int y) { return ( x>=0 && y >= 0 && x < maxn&&y < maxn && dis[x][y] == -1 && !G[x][y] );//dis[x][y]==-1表示未经过此点 } void bfs() { queue<Node>Q; Q.push(Node(0, 0)); memset(dis, -1, sizeof(dis)); dis[0][0] = 0; while (!Q.empty()) { Node u = Q.front(); Q.pop(); for (int i = 0; i < 4; i++) { int dx = u.x +dir[i][0]; int dy = u.y + dir[i][1]; if (isleg(dx, dy)) { dis[dx][dy] = dis[u.x][u.y] + 1;// path[dx][dy] = u; Q.push(Node(dx, dy)); } } } } void printPath(Node u) { if (!u.x&&!u.y) { printf("(0, 0)\n"); return; } printPath(path[u.x][u.y]); printf("(%d, %d)\n", u.x, u.y); } int main() { int i, j; for (i = 0; i < maxn; i++) for (j = 0; j < maxn; j++) scanf("%d", &G[i][j]); bfs(); printPath(Node(4, 4));//递归打印路径 return 0; }
在这里,BFS求出了每个点到起点的最短距离
注意, 只要"某个点到起点的距离"从初始状态被赋值, 那么这个值就是最优的, 因为可以把BFS之后的图看为是一个BFS树, 某点的所在的"层数"就是其到起点的距离, 当其被BFS第二次的时候的"层数"一定 大于或等于 第一次的"层数", 即离起点更远了
相关文章推荐
- 洛谷 1144 最短路计数 bfs
- 利用邻接矩阵存储无向图,并实现BFS(非递归) DFS(递归+非递归)两种遍历
- hdu 1548 A strange lift (bfs、最短路)
- UVA11624(bfs最短路)
- HDOJ 2612 Find a way【最短路 双重bfs】
- ACM-icpc---bfs求最短路
- Uva 1600 Patrol Robot (BFS 最短路)
- BFS求最短路
- hdu 2680Choose the best route 最短路(加入一个0点) BFS + priority——queue
- poj 1130 Alien Security (dfs+bfs<反向最短路>)
- POJ 3170(bfs求最短路)
- 洛谷 1144 最短路计数 bfs
- HDU - 1874 - 畅通工程续 【单源最短路 利用 dijkstra || spfa 解决】
- 2017南宁网络赛J.Minimum Distance in a Star Graph(bfs求最短路)
- HDU 1548 A strange lift(最短路或BFS)
- hdu5876 Sparse Graph(bfs最短路)
- 【bzoj1195】[HNOI2006]最短母串 AC自动机+状态压缩+BFS最短路
- BFS(最短路+路径打印) POJ 3984 迷宫问题
- 利用BFS和DFS解决 LeetCode 130: Surrounded Regions
- HDU 4885 Bestcoder#2-1003 TIANKENG’s travel 【判断三点共线建图 + 最短路bfs】