hdu 1874 畅通工程续(bellman-ford,dijkstra)
2016-05-30 22:36
453 查看
bellman-ford:
#include <stdio.h> #define INF 99999999 int u[2200],v[2200],w[2200]; int dis[210]; int main() { int n,m,i,k; while(scanf("%d %d",&n,&m) != EOF) { for(i = 0; i < m; ++i) { scanf("%d %d %d",&u[i],&v[i],&w[i]); u[i+m] = v[i]; v[i+m] = u[i]; w[i+m] = w[i]; } int start,end; scanf("%d %d",&start,&end); for(i = 0; i < n; ++i) dis[i] = INF; dis[start] = 0; for(k = 0; k < n; ++k) for(i = 0; i < 2*m; ++i) if(dis[v[i]] > dis[u[i]] + w[i]) dis[v[i]] = dis[u[i]] + w[i]; if(dis[end] < INF) printf("%d\n",dis[end]); else printf("-1\n"); } return 0; }
dijkstra:
#include <iostream> #include <cstring> using namespace std; #define INF 99999999 int map[200][200]; int dis[200]; int book[200]; int n,m; int main() { int S,T,i,k,j,x,y,z; while(cin >> n >> m) { for(i = 0; i < n; ++i) for(j = 0; j < n; ++j) if(i == j) map[i][j] = 0; else map[i][j] = INF; for(i = 0; i < m; ++i) { cin >> x >> y >> z; if(z < map[x][y]) map[x][y] = map[y][x] = z; } memset(book,0,sizeof(book)); cin >> S >> T; for(i = 0; i < n; ++i) dis[i] = map[S][i]; book[S] = 1; int min = INF; int u,v; for(k = 0; k < n; ++k) { min = INF; for(i = 0; i < n; ++i) if(!book[i] && min > dis[i]){ min = dis[i]; u = i;} book[u] = 1; for(v = 0; v < n; ++v) dis[v] = dis[v] < dis[u]+map[u][v] ? dis[v]:dis[u]+map[u][v]; } if(dis[T] != INF) cout << dis[T] << endl; else cout << "-1" << endl; } return 0; }
相关文章推荐
- 写出这个数
- Android系统架构
- MySQL 创建数据库的两种方法
- Easy-题目59:204. Count Primes
- toString()方法
- IM通讯协议总结之一PRIM和IMPP协议
- 线程之间的通信
- android activity 传参
- Celery用户指引-------------Tasks
- 卷积神经网络中图像池化操作全解析
- 管道请求处理流程
- Bone Collector
- JQUERY知识总结
- 训练3 习题22
- MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC
- 浅析Android中的消息机制-解决:Only the original thread that created a view hierarchy can touch its views.
- 策略模式(简单入门)
- RHRL7.0安装RAC11.2.0.4----安装操作系统
- 基于zipkin分布式链路追踪系统预研第一篇
- 安卓中引入第三方汉字转拼音架包的写法及注意事项