poj 2485

来源:互联网 发布:java试卷生成系统源码 编辑:程序博客网 时间:2024/04/30 17:28

Flatopia岛要修路,这个岛上有n个城市,要求修完路后,各城市之间可以相互到达,且修的总路程最短.求所修路中的最长的路段.

这是一个最小生成树的问题 使用prim 算法

#include<stdio.h>
#include<stdlib.h>
#define Max 503
int str[Max][Max];
bool visit[Max];
int distan[Max];
int n;
int prim()
{
int mini;
int v,i,j,maxi=0;
visit[0]=true;
for(i=0;i<n;i++)
distan[i]=str[0][i];
for(j=1;j<n;j++)
{
mini=65550;
for(i=0;i<n;i++)
{
if(visit[i]==false&&distan[i]<mini)
{
mini=distan[i];
v=i;
}
}
visit[v]=true;
if(maxi<mini)
maxi=mini;
for (i=0;i<n;i++)//将生成树的权值更新
        {
            if(visit[i]==false&&distan[i]>str[v][i])//distan[i]中始终放生成树到顶点i的最小权值
            {
                distan[i]=str[v][i];
            }
        }
    }
    return maxi;


}
int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
visit[i]=false;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&str[i][j]);
printf("%d\n",prim());
}
return 0;
}

0 0