hdu2544
来源:互联网 发布:.net防止sql注入 编辑:程序博客网 时间:2024/06/05 03:33
一一题非常简单的单源无向正值最短路径图问题,用来练练手,分别用Dijkstra算法和prim算法做了一次,注释写得比较清楚了,看不懂可以先从下面的链接了解一下算法。
Dijkstra:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define loop(i,u,v) for(int i = u; i <= v; i++)#define INF 0xffffff#define N 105int map[N][N],dis[N];bool state[N];void dijkstra(int n,int m){ dis[1] = 0; state[1] = true; int cut = 1; //最新加入已经true的点 loop(j,1,n) { if(state[j] == false) { if(dis[j] > dis[cut] + map[cut][j]) dis[j] = dis[cut] + map[cut][j]; } }//更新所有点到起点的距离 loop(i,1,n) { int current_shortest = INF; int possible_point; loop(j,1,n) { if(state[j] == false) { if(current_shortest > dis[j] ) { current_shortest = dis[j] ; possible_point = j; } } }//这个循环用来寻找集合[T]到集合[s]最近的点 state[possible_point] = true; cut = possible_point; //cout << "selected point" << cut << endl; if(state[n] == true) break; loop(j,1,n) { if(state[j] == false) { if(dis[j] > dis[cut] + map[cut][j]) dis[j] = dis[cut] + map[cut][j]; } } //这个循环通过当前离起点最近的点来更新所有未并入集合[S]的点到起点的距离 }}int main(){ int n,m; while(cin >> n >> m) { if(n == 0) break; memset(state,0,sizeof(state)); loop(i,1,n) dis[i] = INF; loop(i,1,n) { loop(j,1,n) map[i][j] = INF; } int a,b,c; loop(i,1,m) { scanf("%d%d%d",&a,&b,&c); if(c < map[a][b]) map[a][b] = map[b][a] = c; } dijkstra(n,m); cout << dis[n] << endl; } return 0;}
prim:
#include <iostream>#include <cstdio>#include <cmath>using namespace std;#define N 105#define INF 0xffffffint map[N][N];void prim(int n){ for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { for(int k = 1; k <= n; k++) { map[j][i] = map[i][j] = min(map[i][j],map[i][k]+map[k][j]); } }//DP的思想,就是通过k点,可以找到i->k->j这条路比i->j短 }}int main(){ int n,m; while(cin >> n >> m) { if(n == 0) break; int a,b,c; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { map[i][j] = INF; } map[i][i] = 0;//注意,一定要将这条路长度设为0 } for(int i = 1; i <= m; i++) { scanf("%d%d%d",&a,&b,&c); if(map[a][b] > c) map[a][b] = map[b][a] = c; } prim(n); cout << map[1][n] << endl; } return 0;}
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html
http://blog.csdn.net/zhongyanghu27/article/details/8221276
0 0
- hdu2544
- hdu2544
- hdu2544
- hdu2544
- HDU2544
- hdu2544
- hdu2544
- hdu2544
- hdu2544
- hdu2544
- HDU2544 spfa
- HDU2544 spfa
- hdu2544(最短路径)
- hdu2544最短路
- hdu2544最短路
- hdu2544(最短路)
- hdu2544最短路
- hdu2544 bellmanford实现
- acm_录取概率
- 内存优化
- #include <unistd.h> 头文件
- 每日一linux命令(5)-------rm
- 集合相似度(PAT)
- hdu2544
- 2016/5/26
- linux基本命令(36)——diff命令
- js选择器和jquery选择器的比较
- Android PendingIntent
- Set的原理浅析 HashSet, TreeSet(NavigableMap)
- 安卓拍照 相册上传图片至服务器
- 网络请求 、二级列表和数据库
- 大坑