最小生成树
来源:互联网 发布:计算留存率sql语句 编辑:程序博客网 时间:2024/06/09 18:37
样例输入 Sample Input
4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0
样例输出 Sample Output
28
Prim算法
/*作者:thmyl题目:p1078 最小生成树*///邻接矩阵#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,map[110][110],ans,dis[110];bool vis[110];void Prim(){ memset(dis,127/3,sizeof(dis)); dis[1]=0; for(int i=1;i<=n;i++){ int k=0; for(int j=1;j<=n;j++){ if(!vis[j]&&(dis[j]<dis[k])){ k=j; } } ans+=dis[k]; vis[k]=1; for(int j=1;j<=n;j++){ if(!vis[j]) dis[j]=min(dis[j],map[k][j]); } }}int main(){ memset(map,127/3,sizeof(map)); scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&map[i][j]); Prim(); printf("%d",ans);}
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,num,head[220],ans,dis[110];bool vis[110];struct node{ int to,v,pre;}e[22000];void Insert(int from,int to,int v){ e[++num].pre=head[from]; e[num].to=to; e[num].v=v; head[from]=num;}void Prim(){ memset(dis,127/3,sizeof(dis)); dis[1]=0; for(int i=1;i<=n;i++){ int minn=0x7fffffff,k=0; for(int j=1;j<=n;j++){ if(!vis[j]&&dis[j]<minn){ minn=dis[j]; k=j; } } if(minn==0x7fffffff)break; vis[k]=1; for(int j=head[k];j;j=e[j].pre){ int f=e[j].to; if(!vis[f]) dis[f]=min(dis[f],e[j].v); } } for(int i=1;i<=n;i++)ans+=dis[i];}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ int x;scanf("%d",&x); if(i!=j)Insert(i,j,x); } } Prim(); printf("%d",ans);}
0 0
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- Ubuntu 搭建gitlab服务器
- 阿牛的EOF牛肉串
- codevs1380 没有上司的舞会
- C# 取得JS里的 getdate 日期格式
- 【转载】Bootstrap基础
- 最小生成树
- 道德经全文翻译
- 图论1 Tarjan算法
- bzoj1709[Usaco2007 Oct Gold]Super Paintball超级弹珠
- QE3\QDII和QFII
- 图论2 最近公共祖先LCA
- 通达信股票交易软件使用秘籍
- 体力劳动强度分级
- 图论3 二分图匹配