POJ2485-最小生成树水题

来源:互联网 发布:alexnet网络理解 编辑:程序博客网 时间:2024/04/28 13:19

1.算法:

本体已经给你邻接矩阵了

注意要点:

1.本题中图是边护很多的图,所以说,本体使用Krustral算法不太理想,我们要排序的边实在太多了,所以说我们采用Prim算法

2.本题的求解题意是求出最小生成树中的最大边,我们对求最小生成树的算法稍加改进就可以AC

2.AC代码

#include"iostream"#include"cstdio"#include"cstring"#define inf 99999999using namespace std;int map[510][510];int dis[510];int n;int sum;int book[510];int main(){int t;scanf("%d",&t);while(t--){memset(book,0,sizeof(book));sum=0;scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&map[i][j]);}}memset(dis,0,sizeof(dis));for(int i=1;i<=n;i++) dis[i]=map[1][i];book[1]=1;for(int i=1;i<=n-1;i++){int minpoint;int mink=inf;for(int j=1;j<=n;j++){if(book[j]==0&&dis[j]<mink){mink=dis[j];minpoint=j;}}book[minpoint]=1;sum=sum>mink?sum:mink;for(int j=1;j<=n;j++){if(book[j]==0&&dis[j]>map[minpoint][j]) dis[j]=map[minpoint][j];}}printf("%d\n",sum);}return 0;}


0 0
原创粉丝点击