您的位置:首页 > 其它

poj 1502 MPI Maelstrom

2011-11-23 20:23 197 查看

题意真没看懂。。英语太差,看了DISCUSS才知道是求第一个点到其他顶点的最短路径中的最大值!!因为所有信息是同时发送的

#include<stdio.h>

#include<stdlib.h>

#define MAXN 101

#define INF 1<<11

int map[MAXN][MAXN];

int dis[MAXN],used[MAXN];

void input(int n)

{

int i,j;

char s[10];

for(i=2;i<=n;i++)

{

for(j=1;j<=i-1;j++)

{

scanf("%s",s);

if(s[0]=='x')

map[i][j]=map[j][i]=INF;

else

map[i][j]=map[j][i]=atoi(s);

}

}

for(i=1;i<=n;i++)

map[i][i]=0;

}

int find_max(int n)

{

int i,max=-1;

for(i=1;i<=n;i++)

if(dis[i]>max)

max=dis[i];

return max;

}

void dijkstra(int n)

{

int i,j,min,v;

for(i=1;i<=n;i++)

{

used[i]=0;

dis[i]=map[1][i];

}

used[1]=1;

while(1)

{

min=INF,v=0;

for(i=1;i<=n;i++)

{

if(!used[i]&&dis[i]<min)

{

min=dis[i];

v=i;

}

}

if(v==0)

break;

used[v]=1;

for(j=1;j<=n;j++)

if(!used[j]&&map[v][j]+dis[v]<dis[j])

dis[j]=map[v][j]+dis[v];

}

printf("%d\n",find_max(n));

}

int main()

{

int n;

while(scanf("%d",&n)==1)

{

input(n);

dijkstra(n);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: