[POJ1258]最小生成树+PRIM+KURSKAL
来源:互联网 发布:周潜川内经知要讲义 编辑:程序博客网 时间:2024/05/20 06:51
【题目】:http://poj.org/problem?id=1258
【代码】:
第一个是PRIM算法
#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define size 200#define MAX 99999999int array[size][size];int low[size];bool flag[size];int sum,num,i,k;int Prim(int n){sum=0; memset(flag,false,sizeof(flag)); flag[0] = true; for(i = 1; i < n; i++) low[i] = array[0][i]; for(i=1;i<n;i++){ int min = MAX; int j = 0; for(k = 1; k < n; k++) if( low[k] < min && flag[k]==false ) { min = low[k]; j = k; } sum += min; flag[j] = true; for(k = 1; k < n; k++) if(array[j][k] < low[k] && flag[k]==false) low[k] = array[j][k]; } return sum;}int main(){while(cin>>num){for(i = 0; i < num; i++)for(int j = 0; j < num; j++)scanf("%d",&array[i][j]);printf("%d\n",Prim(num));} return 0;}
第二个是Kruskal
#include<cstdio>#include<cstring>#include<iostream>#include<stdlib.h>#define MAX 5000typedef struct _edge{ int x,y; int weight;};struct _edge edge[MAX];int father[MAX];int rank[MAX];int sum;void initial(){ memset(rank,0,sizeof(rank)); int i; for(i=0;i<MAX;i++) father[i]=i; sum=0;}int Find_Set(int x){ if(x!=father[x]) father[x]=Find_Set(father[x]); return father[x];}int Union_Set(int x,int y,int w){ int a,b; a=Find_Set(x); b=Find_Set(y); if(a==b) return 0; if(rank[x]>rank[y]) father[b]=a; else { father[a]=b; if(rank[x]==rank[y]) rank[x]++; } sum+=w; return 1;}int cmp(const void *a,const void *b){ return (*(struct _edge*)a).weight>(*(struct _edge*)b).weight?1:-1;}int main(){ int n; int i,j; int cnt; int tmp; int x,y; while(scanf("%d",&n)!=EOF) { cnt=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(i<j) { edge[cnt].x=i; edge[cnt].y=j; scanf("%d",&edge[cnt].weight); cnt++; } else scanf("%d",&tmp); } qsort(edge,cnt,sizeof(edge[0]),cmp); initial(); for(i=0;i<cnt;i++) { x=Find_Set(edge[i].x); y=Find_Set(edge[i].y); if(x!=y) Union_Set(x,y,edge[i].weight); } printf("%d\n",sum); } return 0;}
0 0
- [POJ1258]最小生成树+PRIM+KURSKAL
- poj1258 prim最小生成树
- poj1258 prim最小生成树
- poj1258(最小生成树Prim)
- 最小生成树(Prim)poj1258
- poj1258 最小生成树,prim
- POJ1258 最小生成树prim算法
- 最小生成树poj1258 prim和kruskal
- poj1258 最小生成树 prim算法
- 最小生成树(prim算法)--poj1258
- POJ1258最小生成树(prim算法)
- poj1258--最小生成树prim算法实现
- POJ1258 Agri-Net 【最小生成树Prim】
- 最小生成树 Prim算法 POJ1258题解
- Kurskal算最小生成树
- POJ1258--贪心&最小生成树的prim算法
- POJ1258 Agri-Net(Prim求解最小生成树)
- 最小生成树之Prim算法---POJ1258---Agri-Net
- mybatis与SpringMVC集成
- 北京所有知名小学内参及点评
- #includeiostream与#includeiostream.h及#inclue string 和 #include string.h的区别
- Afaria 7服务器升级过程
- 设计模式六大原则之--接口隔离原则(ISP)
- [POJ1258]最小生成树+PRIM+KURSKAL
- 小兵张嘎演员扮艺妓照曝光 网友:毁童年
- IOS中如何将十六进制颜色的字符串转化为UIColor
- 2012届华为编程大赛第二题
- C++如何判断运算结果溢出
- jQuery.form.js-表单插件使用及API
- 做好功课才不会被加盟骗术骗到
- 输入一个字符串,输出长度最长的单词
- 关于投进ppc竞价关键字的分析办法