hdu 3790 最短路径问题
2014-02-21 23:52
183 查看
点击打开链接
中文题,此题在短路径的基础上加入了一个新的条件(即花销)用于在最短路径相同时,比较花销最少的选择之,还算是一道比较基础的最短路径利用。Dijkstra算法
代码如下:
中文题,此题在短路径的基础上加入了一个新的条件(即花销)用于在最短路径相同时,比较花销最少的选择之,还算是一道比较基础的最短路径利用。Dijkstra算法
代码如下:
#include <stdio.h> #include <string.h> #define max 100000000 int min[1010], cost[1010], visit[1010]; struct node { int d;////长度 d int p;////话费 p }map[1010][1010]; int n, m; void Init() { int i, j; for(i=1; i<=n; i++) for(j=1; j<=n; j++) { map[i][j].d = max; map[j][i].p = max; } } void Dijkstra(int start) { int i, tmin, j, temp; memset(visit, 0, sizeof(visit)); for(i=1; i<=n; i++) { min[i] = map[start][i].d; cost[i] = map[start][i].p; } visit[start] = 1; min[start] = cost[start] = 0; for(i=1; i<n; i++) { tmin = max; for(j=1; j<=n; j++) { if(!visit[j] && tmin>min[j]) { temp = j; tmin = min[j]; } } if(tmin == max) break; visit[temp] = 1; for(j=1; j<=n; j++) { if(!visit[j] && min[j]>min[temp] + map[temp][j].d) { min[j] = min[temp] + map[temp][j].d; cost[j] = cost[temp] + map[temp][j].p; } else if(!visit[j] && min[j] == min[temp] + map[temp][j].d)////////加入了这个条件 { if(cost[j] > cost[temp] + map[temp][j].p) cost[j] = cost[temp] + map[temp][j].p; } } } } int main() { int a, b, d, p; int start, end; while(~scanf("%d%d", &n, &m)) { if(n==0&&m==0) break; Init(); for(int i=1; i<=m; i++) { scanf("%d%d%d%d", &a, &b, &d, &p); if(map[a][b].d > d) { map[a][b].d = map[b][a].d = d; map[a][b].p = map[b][a].p = p; } } scanf("%d%d", &start, &end); Dijkstra(start); printf("%d %d\n", min[end], cost[end]); } return 0; }
相关文章推荐
- hdu 3790 最短路径问题
- HDU 3790 最短路径问题
- 最短路径问题经典题目汇总
- 最短路径问题
- 0033算法笔记——分支限界法与单源最短路径问题
- 最短路径问题--比较综合的一道题
- 最短路径问题-Dijstra
- 单源加权图最短路径问题(权值非负)-Dijkstra算法
- 关于最短源路径问题
- 单源最短路径问题
- NYOJ 7 街区最短路径问题
- 杭电3790最短路径问题
- 有向无环图求单源最短路径问题
- Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算)
- 用lingo解决“最短路径问题”
- 多源点最短路径问题
- NYOJ-7:街区最短路径问题
- 最短路径问题之一:忽略权重直接求最短路径
- 算法系列笔记8(有关图的算法二—最短路径问题)
- HDU 3790 最短路径问题