HDU-2544-最短路
2016-11-09 19:25
253 查看
ACM模版
描述
题解
基础最短路,只要会套模版,就能A。代码
#include <iostream> #include <cstring> using namespace std; /* * 单源最短路径,Dijkstra算法,邻接矩阵形式,复杂度为O(n^2) * 求出源beg到所有点的最短路径,传入图的顶点数和邻接矩阵cost[][] * 返回各点的最短路径lowcost[],路径pre[],pre[i]记录beg到i路径上的父节点,pre[beg] = -1 * 可更改路径权类型,但是权值必须为非负 */ const int MAXN = 110; const int INF = 0x3f3f3f3f; // 表示无穷 bool vis[MAXN]; int pre[MAXN]; void Dijkstra(int cost[][MAXN], int lowcost[], int n, int beg) { for (int i = 0; i < n; i++) { lowcost[i] = INF; vis[i] = false; pre[i] = -1; } lowcost[beg] = 0; for (int j = 0; j < n; j++) { int k = -1; int min = INF; for (int i = 0; i < n; i++) { if (!vis[i] && lowcost[i] < min) { min = lowcost[i]; k = i; } } if (k == -1) { break; } vis[k] = true; for (int i = 0; i < n; i++) { if (!vis[i] && lowcost[k] + cost[k][i] < lowcost[i]) { lowcost[i] = lowcost[k] + cost[k][i]; pre[i] = k; } } } } int cost[MAXN][MAXN]; int lowcost[MAXN]; int main(int argc, const char * argv[]) { int N, M; while (cin >> N >> M, N + M) { memset(cost, 0x3f, sizeof(cost)); int A, B, C; for (int i = 0; i < M; i++) { scanf("%d%d%d", &A, &B, &C); cost[A - 1][B - 1] = C; cost[B - 1][A - 1] = C; } Dijkstra(cost, lowcost, N, 0); printf("%d\n", lowcost[N - 1]); } return 0; }
参考
《最短路》相关文章推荐
- HDU 2544 最短路
- hdu 2544最短路(Dijkstra)
- [HDU - 2544] 最短路
- hdu 2544 最短路
- hdu 2544 最短路
- (HDU-2544)最短路
- hdu-2544-最短路
- 最短路 hdu 2544
- HDU 2544 最短路(模板题——Floyd算法)
- HDU 2544.最短路
- hdu 2544 最短路
- 无向图邻接表怎么建,求指点!! HDU 2544 最短路(Dijkstra、结题报告 精简版!)
- 【HDU - 2544 最短路】 最短路 dijkstra,spfa
- hdu 2544 最短路 spfa模板题
- Hdu-2544 最短路
- hdu 2544 最短路(Dijkstra 备忘)
- HDU 2544:最短路( 最短路径入门 &&Dijkstra && floyd )
- hdu_2544 最短路
- hdu 2544 最短路
- HDU 2544 最短路 SPFA 邻接表 模板