POJ 1502 MPI Maelstrom 最短路dijkstra
题意:求源点1到其它任意点的最小值 之中的最大值。
题意理解后,dijkstra水题
View Code
#include<stdio.h> #include<string.h> #define maxn 101 #define INF 100000000 int n, m; int adj[maxn][maxn],dis[maxn]; int max; bool vis[maxn]; int dijkstra(int v) { int i,j,k,min,u; for(i=1;i<=n;i++) { dis[i]=adj[v][i]; vis[i]=0; } vis[v]=1;dis[v]=0; for(i=1;i<n;i++) { min = INF; for(j=1;j<=n;j++) { if(min > dis[j]&&!vis[j]) { min =dis[j]; u = j; } } if(min == INF)break; vis[u]=1; for(j=1;j<=n;j++) { if(dis[u]+adj[u][j] < dis[j] &&!vis[j]) { dis[j] = dis[u]+adj[u][j]; } } } int max = dis[1]; for(i=2;i<=n;i++) { if(max < dis[i])max=dis[i]; } return max; } int main() { int i ,j; char s[34]; while(~scanf("%d",&n)) { for(i=2;i<=n;i++) { for(j=1;j<i;j++) { scanf("%s",s); if(s[0]=='x')adj[i][j]=adj[j][i]=INF; else { int len =strlen(s),k; int sum=0; for(k=0;k<len;k++) sum= sum*10+s[k]-'0'; adj[i][j]=adj[j][i]=sum; } } } printf("%d\n",dijkstra(1)); } return 0; }


浙公网安备 33010602011771号