(重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
2013-06-18 01:12
441 查看
floyd解法
今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂。
模版题,纯练打字。。。
HDU 1874:
HDU 2544:
今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂。
模版题,纯练打字。。。
HDU 1874:
#include <cstdio> #define MAXN 200 #define INF 0xfffff int n; int Edge[MAXN][MAXN]; int s[MAXN]; int dist[MAXN]; int path[MAXN]; void Dijkstra(int v0) { int i, j, k; for (i = 0; i < n; i++) { dist[i] = Edge[v0][i]; s[i] = 0; if (i != v0 && INF > dist[i]) path[i] = v0; else path[i] = -1; } s[v0] = 1; dist[v0] = 0; for (i = 0; i < n - 1; i++) { int min = INF, u = v0; for (j = 0; j < n; j++) if (!s[j] && dist[j] < min){ u = j; min = dist[j]; }//if s[u] = 1; for (k = 0; k < n; k++) { if (!s[k] && Edge[u][k] < INF && dist[u] + Edge[u] [k] < dist[k]) { dist[k] = dist[u] + Edge[u][k]; path[k] = u; }//if }//for }//for } int main() { int m; int i, j; while (scanf("%d%d", &n, &m) != EOF) { for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (i == j) Edge[i][j] = 0; else Edge[i][j] = INF; int x, y, z; for (i = 0; i < m; i++) { scanf("%d%d%d", &x, &y, &z); if (z < Edge[x][y]) Edge[y][x] = Edge[x][y] = z; } scanf("%d%d", &x, &y); Dijkstra(x); if (dist[y] < INF) printf("%d\n", dist[y]); else printf("-1\n"); }//while return 0; }
HDU 2544:
#include <cstdio> #define MAXN 200 #define INF 0xfffff int n; int Edge[MAXN][MAXN]; int s[MAXN]; int dist[MAXN]; int path[MAXN]; void Dijkstra(int v0) { int i, j, k; for (i = 0; i < n; i++) { dist[i] = Edge[v0][i]; s[i] = 0; if (i != v0 && INF > dist[i]) path[i] = v0; else path[i] = -1; } s[v0] = 1; dist[v0] = 0; for (i = 0; i < n - 1; i++) { int min = INF, u = v0; for (j = 0; j < n; j++) if (!s[j] && dist[j] < min){ u = j; min = dist[j]; }//if s[u] = 1; for (k = 0; k < n; k++) { if (!s[k] && Edge[u][k] < INF && dist[u] + Edge[u] [k] < dist[k]) { dist[k] = dist[u] + Edge[u][k]; path[k] = u; }//if }//for }//for } int main() { int m; int i, j; while (scanf("%d%d", &n, &m) && n && m) { for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (i == j) Edge[i][j] = 0; else Edge[i][j] = INF; int x, y, z; for (i = 0; i < m; i++) { scanf("%d%d%d", &x, &y, &z); if (z < Edge[x-1][y-1]) Edge[y-1][x-1] = Edge[x-1][y-1] = z; } Dijkstra(0); printf("%d\n", dist[n - 1]); }//while return 0; }
相关文章推荐
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
- HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,floyd水
- HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,floyd水
- HDU1874_畅通工程续(Dijkstra最短路)
- HDU 1874 畅通工程续(最短路/spfa Dijkstra 邻接矩阵+邻接表)
- HDU1874-畅通工程续(Dijkstra最短路)
- HDU 1874 畅通工程续(单源最短路之Dijkstra n^2算法)
- HDOJ/HDU---1874 畅通工程续 最短路(dijkstra)
- HDU 1874 畅通工程续 (floyd,dijkstra)(最短路)
- HDU - 1874 - 畅通工程续 【单源最短路 利用 dijkstra || spfa 解决】
- 【最短路入门专题1】 hdu 1874 B - 畅通工程续 坑题【dijkstra】
- hdu_1874_畅通工程_最短路_dijkstra
- HDU1874:畅通工程续(最短路Dijkstra(n^2+nlogn)+Floyd+SPFA(堆栈+队列))
- 【HDU】-1874-畅通工程续(最短路)(dijkstra)
- HDU 1874-畅通工程续(最短路Dijkstra+优先队列)
- HDU 1874 畅通工程续【最短路 dijkstra & floyed & SPFA 】
- HDU1874 畅通工程续 【链式前向星】+【Dijkstra】
- HDU——1874畅通工程续(Dijkstra与SPFA)
- hdu 1874 畅通工程续(最短路)
- HDU 1874 畅通工程续 (dijkstra模板)