hihoCoder1097 1098 1109:最小生成树
来源:互联网 发布:悉尼动物园 知乎 编辑:程序博客网 时间:2024/05/24 04:58
hihoCoder1097:最小生成树一:Prime算法
题目链接:http://hihocoder.com/problemset/problem/1097
分析:Prime算法用的是土的邻接矩阵,这在图中顶点数比较小的时候是挺有效的。
实现代码如下:
#include <cstdio>#include <cstring>#include <iostream>#define MAX 1005#define INF 999999999using namespace std;bool s[MAX];int map[MAX][MAX],dist[MAX];int Prime(int n){ int i,j,k,mind,sum; for(i=1;i<=n;i++) dist[i]=map[1][i]; s[1]=true; sum=0; for(i=1;i<=n;i++) { mind=INF; k=1; for(j=1;j<=n;j++) if(!s[j]&&dist[j]<mind) { mind=dist[j]; k=j; } s[k]=true; sum+=dist[k]; for(j=1;j<=n;j++) if(!s[j]&&dist[j]>map[k][j]) dist[j]=map[k][j]; } return sum;}int main(){ int n,m; while(scanf("%d",&n)!=-1) { memset(s,false,sizeof(s)); int a,b,x; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&map[i][j]); printf("%d\n",Prime(n)); } return 0;}
hihoCoder1098:最小生成树二:Kruscal算法
题目链接:http://hihocoder.com/problemset/problem/1098
分析:本题顶点数和边数较大,邻接矩阵不再适合,可以考虑用前向星来存储图:即最小生成树的Kruskal算法。
实现代码如下:
#include <cstdio>#include <iostream>#include <algorithm>using namespace std;#define MAX 1000005typedef struct node{ int from,to; int w;}Node;//前向星表示图Node map[MAX];int n,m;//n代表边数,m代表顶点数//并查集部分int par[MAX],ran[MAX];void Init(){ for(int i=1;i<=n;i++) { par[i]=i; ran[i]=1; }}int Find(int x){ if(par[x]!=x) return par[x]=Find(par[x]); return par[x];}void Union(int x,int y){ x=Find(x); y=Find(y); if(x==y) return ; if(ran[x]>ran[y]) { par[y]=x; ran[x]+=ran[y]; } else { par[x]=y; ran[y]+=ran[x]; }}//Kruskal算法求最小生成树int cmp(const Node &a,const Node &b){ return a.w<b.w;}int Kruskal(){ Init(); int sum=0,k=0; sort(map+1,map+1+m,cmp); for(int i=1;i<=m;i++) { if(k==n-1) break; int x=Find(map[i].from); int y=Find(map[i].to); if(x!=y) { Union(x,y); sum+=map[i].w; k++; } } return sum;}int main(){ while(scanf("%d%d",&n,&m)!=-1) { int a,b,x; for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&x); map[i].from=a; map[i].to=b; map[i].w=x; } printf("%d\n",Kruskal()); } return 0;}
hihoCoder1109:最小生成树三:堆优化的Prime算法
题目链接:http://hihocoder.com/problemset/problem/1109
分析:用上一个代码直接A了...改都不用改==
0 0
- hihoCoder1097 1098 1109:最小生成树
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- Hello world
- MySQL的存储引擎
- 如何切换 SVN 用户名
- window.open打开/关闭制定页面
- Zookeeper + Hadoop + HBase Cluster Installer
- hihoCoder1097 1098 1109:最小生成树
- android webview和js交互实现
- C语言的那些秘密之--函数返回局部变量
- 桥式转换(bridged cast)
- 解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(12
- LINUX彻底清除历史记录命令
- jQuery $.each用法
- MySQL表结构优化
- Java程序员必备的开发工具