最短路径问题(BFS)
2013-03-15 22:19
204 查看
#include <iostream> #include <cstdio> #include <queue> #include <algorithm> using namespace std; const int maxn = 1000; struct locat{ int x; int y; int sum; ///存放当前到达此处最小值 int pre; ///原始值,不变的。 bool mark;///标记此处已经访问过,即sum的值已经改变。 locat(){ mark = false; } }; locat map1[maxn][maxn]; int m, n; int ex, ey;///目的地点。 void init(){ scanf("%d%d", &m, &n); for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { scanf("%d", &map1[i][j].pre); map1[i][j].sum = map1[i][j].pre; ///初始化 map1[i][j].x = i; map1[i][j].y = j; } } scanf("%d%d", &ex, &ey); } void work() { locat tmp; locat tmp1; queue<locat> q; q.push(map1[1][1]); while(q.empty()!=true) { tmp = q.front(); tmp1 = tmp; ///保存tmp的值,在向右走的时候用。 q.pop(); if(tmp.x<m){ ///判断是否越界,否则向下走。 if(map1[tmp.x+1][tmp.y].mark == false) { ///第一次访问 tmp.sum = tmp.sum + map1[tmp.x+1][tmp.y].pre; map1[tmp.x+1][tmp.y].sum = tmp.sum; q.push(tmp); map1[tmp.x+1][tmp.y].mark = true; } else{///第二次访问 map1[tmp.x+1][tmp.y].sum = min(map1[tmp.x+1][tmp.y].sum, map1[tmp.x][tmp.y].sum + map1[tmp.x+1][tmp.y].pre); /* if(tmp.x+1 == ex && tmp.y == ey) { break; } */ q.push(map1[tmp.x+1][tmp.y]); } } if(tmp1.y<n) { if(map1[tmp1.x][tmp1.y+1].mark == false) { tmp1.sum = tmp1.sum + map1[tmp1.x][tmp1.y+1].pre; map1[tmp1.x][tmp1.y+1].sum = tmp1.sum; q.push(tmp1); map1[tmp1.x][tmp1.y+1].mark = true; } else{ map1[tmp1.x][tmp1.y+1].sum = min(map1[tmp1.x][tmp1.y+1].sum, map1[tmp1.x][tmp1.y].sum+map1[tmp1.x][tmp.y+1].pre); /* if(tmp1.x == ex && tmp1.y+1 == ey) { break; } */ q.push(map1[tmp1.x][tmp1.y+1]); } } } } int main() { init(); work(); printf("%d\n", map1[ex][ey].sum); return 0; } /******************************** 题目:从(1,1)到(m,n)的最短路径。 测试数据: 输入: 4 4 1 2 3 4 5 1 2 5 2 1 8 9 1 1 1 1 4 4 输出: 8 ********************************/
相关文章推荐
- poj 3984迷宫问题(bfs求最短路径 类似并查集保存上个节点 保存最短路径)
- OJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- 回溯法-bfs--迷宫问题的最短路径
- BFS广度搜索(最短路径问题)
- POJ 3984---迷宫问题(BFS,迷宫最短路径且输出路径)
- 迷宫最短路径问题(BFS)
- POJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- 序列元素和、正则表达式匹配、BFS最短路径问题
- 最短路径条数问题(退化Dijkstra,BFS)
- POJ-3984迷宫问题(典型BFS找最短路径)
- Dijkstra算法,Bellman-Ford算法和BFS算法解决有向图的单源最短路径问题
- 迷宫最短路径问题-BFS
- 迷宫问题之最短路径bfs
- BFS 迷宫的最短路径问题
- BFS 求最短路径问题
- 宽度搜索(BFS)中求最短路径问题理解记录
- 2011.11.13 poj2251 如果要用到BFS或者DFS,如果最短路径的相关问题,那么肯定是BFS!!!不会是DFS!!!
- BFS,Dijkstra,Floyd,DP求解最短路径问题
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)