HDU2544最短路 (Dijkstra求最短路)
来源:互联网 发布:快餐店收银软件 编辑:程序博客网 时间:2024/04/29 19:25
Dijkstra最简单的应用—直接套模版。注意这一题要考虑重路,也就是输入的两点A,B相同,这时存储的要是其中最小的C。直接上模版
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int maxn = 110;const int inf = 1e9;int map[maxn][maxn];int dist[maxn];int pre[maxn];int vis[maxn];int n, m;void Dijkstra(int v){ memset(vis, 0, sizeof(vis)); // 判断是否已存入该点到S集合中 for(int i = 1; i <= n; i++) { dist[i] = map[v][i]; if(dist[i] == inf) pre[i] = 0; else pre[i] = v; } dist[v] = 0; vis[v] = 1; for(int i = 2; i <= n; i++) { int temp = inf; int u = v; for(int j = 1; j <= n; j++) { if(!vis[j]&&dist[j]<temp) { u = j; temp = dist[j]; } } vis[u] = 1; for(int j = 1; j <= n; j++) { if(!vis[j]&&map[u][j]!=inf) { int newdist = dist[u]+map[u][j]; if(dist[j] > newdist) { dist[j] = newdist; pre[j] = u; } } } }}int main(){ while(cin>>n>>m) { if(!n||!m) break; int p, q, line; for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) { if(i == j) map[i][j] = 0; else map[i][j] = inf; } while(m--) { scanf("%d%d%d", &p, &q, &line); //此图为无方图 if(line < map[p][q]) { map[p][q] = line; map[q][p] = line; } } for(int i = 1; i <= n; i++) dist[i] = inf; Dijkstra(1); cout<<dist[n]<<endl; } return 0;}
解题报告参考链接:
www.wutianqi.com/?p=1892
0 0
- HDU2544最短路 (Dijkstra求最短路)
- hdu2544 Dijkstra最短路
- HDU2544:最短路(Dijkstra)
- HDU2544 最短路 【Dijkstra】
- hdu2544最短路 Dijkstra 算法求最短路
- hdu2544 最短路(dijkstra)
- hdu2544最短路(dijkstra)
- hdu2544最短路(floyd)(dijkstra)
- hdu2544(裸最短路dijkstra)
- HDU2544 最短路【Dijkstra算法】
- HDU2544 最短路 Dijkstra实现
- HDU2544 最短路(dijkstra算法)
- HDU2544:最短路【Dijkstra & SPFA】
- HDU2544:最短路(Dijkstra,SPFA)
- hdu2544最短路 Floyd求最短路
- hdu2544 最短路(dijkstra求单源最短路)
- Dijkstra 求最短路
- Dijkstra 求最短路
- 机器学习(ML)中文视频教程
- ubuntu下安装oracle java8
- Light OJ 1045 Digits of Factorial(求位数)
- 算法的力量
- centOS下安装apache2.2
- HDU2544最短路 (Dijkstra求最短路)
- Maven使用
- Android中SQLiteOpenHelper使用示例
- 30天自制操作系统
- 安全初始化MySql服务器
- 无聊的高精度。。
- 左值右值
- DSP链接命令文件Linker.cmd的作用及用法举例
- 最大子矩阵