poj 1502 MPI Maelstrom
2013-09-24 11:35
302 查看
还是简单的dij, 题太长了, 但是正经的话语却没几句, 给你一个邻接矩阵的一部分(对角线下面的), x表示这2点没有连着, 然后要你求所有点到点1距离的最短距离中最长的那个距离。
没有思路, 完全就是赤裸裸的。
没有思路, 完全就是赤裸裸的。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int N = 110; const int inf = 100000000; int n, map , dis ; bool vis ; int min(int a,int b) { return a>b?b:a; } void ini() { for(int i=1; i<=n; ++i) { dis[i] = inf; vis[i] = false; } } int transtonum(char *str) { if(str[0] == 'x') return -1; int len = strlen(str); int sum = 0; for(int i=0; i<len; ++i) { sum *= 10; sum += (str[i] - '0'); } return sum; } int dij() { ini(); dis[1] = 0; vis[1] = true; for(int i=2; i<=n; ++i) if(map[1][i]>=0) dis[i] = map[1][i]; int cou = n-1; while(cou--) { int mi = inf, k; for(int i=2; i<=n; ++i) if(!vis[i] && dis[i] < mi) { k = i; mi = dis[i]; } vis[k] = true; for(int i=2; i<=n; ++i) if(!vis[i] && map[i][k] >= 0 && dis[i] > dis[k] + map[i][k]) dis[i] = dis[k] + map[i][k]; } int ma = 0; for(int i=2; i<=n ;++i) if(ma < dis[i]) ma = dis[i]; return ma; } int main(void) { char str[9]; scanf("%d",&n); for(int i=2; i<=n; ++i) for(int j=1; j<i; ++j) { scanf("%s",str); int tmp = transtonum(str); map[i][j] = map[j][i] = tmp; } cout << dij() << endl; return 0; }
相关文章推荐
- POJ 1502 MPI Maelstrom
- poj 1502 MPI Maelstrom
- Poj 1502 MPI Maelstrom【Floyd】
- POJ - 1502 MPI Maelstrom(dijkstra/spfa)
- POJ 1502 MPI Maelstrom【floyd】
- poj 1502 MPI Maelstrom 最短路
- poj 1502 MPI Maelstrom(最短路)
- poj1502——MPI Maelstrom(dijkstra算法)
- 最短路径___MPI Maelstrom(Poj 1502)
- poj_1502_MPI Maelstrom(Dijkstra求单源最短路径)
- poj 1502: MPI Maelstrom
- POJ 1502 - MPI Maelstrom(单源最短路)
- POJ 1502 MPI Maelstrom(单源最短路)
- (简单) POJ 1502 MPI Maelstrom,Dijkstra。
- Dijkstra-POJ-1502-MPI Maelstrom
- POJ 1502 MPI Maelstrom (Dijkstra 模板题)
- poj_1502_MPI Maelstrom_spfa
- POJ 1502 MPI Maelstrom(Dijkstra)
- POJ【1502】MPI Maelstrom
- POJ 1502 MPI Maelstrom