您的位置:首页 > 其它

POJ 1502 MPI Maelstrom 最短路dijkstra

2012-07-23 21:37 477 查看
题意:求源点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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: