您的位置:首页 > 其它

【wikioi】1078最小生成树 floyd 40分C源码

2013-12-16 21:50 309 查看
//floyd
#include<stdio.h>
#include<stdlib.h>

#define INF 120000
#define MAXN 110
int dist[MAXN][MAXN];

int main(void)
{
int i,j;
int n;

scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&dist[i][j]);
if(!dist[i][j])
dist[i][j]=INF;
}
}

int k;
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
if(i==k)
continue;
for(j=1;j<=n;j++)
{
if(j==k||j==i)
continue;
else if(dist[i][k]+dist[k][j]<dist[i][j])
{
dist[i][j]=dist[i][k]+dist[k][j];
}
}
}
}

int vis[MAXN]={0};
int num=1;
int min=INF,sum=0;
int point=1;
while(num<n)
{
min=INF;
for(i=1;i<=n;i++)
{
if((min>dist[point][i])&&(vis[i]==0)&&(i!=point))
{
min=dist[point][i];
k=i;
}
}

vis[point]=1;
num++;
sum+=min;
point=k;
}
printf("%d\n",sum);

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