poj 1125

来源:互联网 发布:软件开发教学 编辑:程序博客网 时间:2024/05/17 03:09

floyd 算法的应用,一开始把三重循环的次序写错了,wa了好长一段时间!注意k的那层循环一定要放到外边

#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>#include<cstring>#include<string>using namespace std;int map[105][105];int main(){    int n,i,j,k,c,cid,clen;    int ansid,ans;    while(scanf("%d",&n)!=EOF&&n)    {        for(i=1;i<=n;i++)        for(j=1;j<=n;j++)        map[i][j]=20000;        for(i=1;i<=n;i++)        map[i][i]=0;        for(i=1;i<=n;i++)        {            scanf("%d",&c);            for(j=1;j<=c;j++)            {              scanf("%d%d",&cid,&clen);              map[i][cid]=clen;            }        }        for(k=1;k<=n;k++)        {            for(i=1;i<=n;i++)            {                for(j=1;j<=n;j++)                {                    if(map[i][j]>(map[i][k]+map[k][j])){                        map[i][j]=map[i][k]+map[k][j];                        }                }            }        }        ansid=1;        ans=20000;        for(i=1;i<=n;i++)        {            clen=0;            for(j=1;j<=n;j++)            {                if(map[i][j]>clen){                    clen=map[i][j];                }            }           if(clen<ans){               ans=clen;               ansid=i;           }        }        if(ans==20000){ printf("disjoint\n");}        else{ printf("%d %d\n",ansid,ans);}    }  return 0;}


原创粉丝点击