您的位置:首页 > 大数据 > 人工智能

Aizu 0189 Convenient Location【floyd】

2016-04-11 21:44 633 查看
原题网址:
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0189
题意:

一共有n个房间,给出某些房间之间的距离,问从哪个房间到所有其他的房间的距离和最小

题解:

最短路问题,而且需要求出所有的最短路,数据范围比较小,使用floyd 就够了......

语言不通最坑啊,还是看别人的题解才大概了解了题目数据的意思........

/* http://blog.csdn.net/liuke19950717 */
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
int graph[15][15];
void floyd(int n)
{
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
{
for(int k=0;k<n;++k)
{
graph[j][k]=min(graph[j][k],graph[j][i]+graph[i][k]);
}
}
}
}
void init(int n)
{
for(int i=0;i<n;++i)
{
for(int j=0;j<i;++j)
{
graph[i][j]=graph[j][i]=inf;
}
graph[i][i]=0;
}
}
int main()
{
int n;
while(scanf("%d",&n),n)
{
init(15);int m=0;
for(int i=0;i<n;++i)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
graph[a][b]=graph[b][a]=min(graph[a][b],c);
m=max(max(m,a),b);
}
floyd(m+1);
int ans=inf,kase=0;
for(int i=0;i<=m;++i)
{
int tp=0;
for(int j=0;j<=m;++j)
{
if(graph[i][j]!=inf)
{
tp+=graph[i][j];
}
}
if(tp<ans)
{
ans=tp;kase=i;
}
}
printf("%d %d\n",kase,ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: