您的位置:首页 > 其它

poj 2485 highways

2013-08-05 18:08 375 查看
比较简单的最小生成树。不过这个题目是让你输出组成最小生成树的那条最长的边的长度。其实这种题目用kruskal算法最好做了,闲的蛋疼的写了个primer算法。用primer关键是要搞清楚primer算法的原理,以及一步步的操作就好了。用primer算法的关键就是,搞清楚现在加进去的节点的原来的长度。看程序。

#include<iostream>
#include<stdio.h>
using namespace std;
int map[1000][1000];
struct node{
int start;
int end;
};
node road[1000];
int flag[1000];
int cun[1000][1000];
int main()
{
int t,i,j,traget,ko;
int dist,mini;
int n;
cin>>t;
while(t--)
{
scanf("%d",&n);
ko=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&map[i][j]);
cun[i][j]=map[i][j];
}
for(i=1;i<=n;i++)
{
flag[i]=0;
map[i][i]=65550;
cun[i][i]=65550;
road[i].start=1;
road[i].end=i;
}
flag[1]=1;
dist=0;
for(i=2;i<=n;i++)
{
traget=1;
mini=65550;
for(j=1;j<=n;j++)
{
if(flag[j]==0&&map[1][j]<mini)
{
mini=map[1][j];
traget=j;
}
}
flag[traget]=1;
dist=dist+mini;
if(cun[road[traget].start][road[traget].end]>ko)
ko=cun[road[traget].start][road[traget].end];
for(j=1;j<=n;j++)
{
if(flag[j]==0&&map[traget][j]<map[1][j])
{
map[1][j]=map[traget][j];
road[j].start=traget;
}
}
}
printf("%d\n",ko);
}
return 0;
}

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