您的位置:首页 > 其它

poj 1125 Stockbroker Grapevine 【最短路&&克鲁斯卡尔】

2015-11-13 12:45 337 查看
题目:

http://poj.org/problem?id=1125

分析:

给你n个点,求从哪一点到任意一点的时间最短。

代码:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N=110;
const int inf=0x3f3f3f3f;
int map

;

int dij(int v,int n)
{
int min,id,i,j;
int dis
,vis
;
for(i=1;i<=n;i++)
{
dis[i]=map[v][i];
vis[i]=0;
}
vis[v]=1;
for(i=1;i<n;i++)
{
min=inf;
id=0;
for(j=1;j<=n;j++)
{
if(!vis[j]&&dis[j]<min)
min=dis[id=j];
}
if(!id)
break;
vis[id]=1;
for(j=1;j<=n;j++)
{
if(!vis[j]&&(min+map[id][j])<dis[j])
dis[j]=min+map[id][j];
}
}
return min;
}

int main()
{
int n,m;
int min,id,stime,x;
while(scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=inf;
for(int i=1;i<=n;i++)
{
scanf("%d",&m);
for(int j=1;j<=m;j++)
{
scanf("%d",&x);
scanf("%d",&map[i][x]);
}
}
min=dij(1,n);
id=1;
for(int i=2;i<=n;i++)
{
stime=dij(i,n);
if(stime<min)
{
min=stime;
id=i;
}
}
printf("%d %d\n",id,min);
}
return 0;
}



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