您的位置:首页 > 其它

joj1002

2011-08-25 20:13 246 查看
//这是一个最小路径的一个问题首先用floyed算法将所有点之间的最短路径求出来

//然后依次假设某个点为起始点求出花费的时间,选取最小的输出

#include<cstdio>

#include<algorithm>

using namespace std;

int map[105][105];

int maxll=10000;

int n;

void floyed()

{

for(int k=1;k<=n;k++)

{

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

{

if(i!=k)

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

{

if(map[i][k]+map[k][j]<map[i][j])

{

map[i][j]=map[i][k]+map[k][j];

}

}

}

}

}

int main()

{

freopen("in.txt","r",stdin);

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

{

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

{

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

{

if(i==j)map[i][j]=0;

else map[i][j]=maxll;

}

}

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

{

int m;

scanf("%d",&m);

for(int j=1;j<=m;j++)

{

int u,v;

scanf("%d%d",&u,&v);

map[i][u]=v;

}

}

floyed();

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

{

sort(map[i]+1,map[i]+n+1);

}

int min=maxll;int dot=0;

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

{

if(min>map[i]
)

{

min=map[i]
;dot=i;

}

}

if(min==maxll)printf("disjoint\n");

else printf("%d %d\n",dot,min);

}

return 0;

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