51nod 1212 无向图最小生成树
来源:互联网 发布:人工智能的原理与作用 编辑:程序博客网 时间:2024/06/05 04:35
1212 无向图最小生成树
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树。
Input
第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量。(2 <= N <= 1000, 1 <= M <= 50000)第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值。(1 <= S, E <= N,1 <= W <= 10000)
Output
输出最小生成树的所有边的权值之和。
Input示例
9 141 2 42 3 83 4 74 5 95 6 106 7 27 8 18 9 72 8 113 9 27 9 63 6 44 6 141 8 8
Output示例
37
最小生成树的解法一般是有Prime生成树和Kruskal生成树来实现:
比较简单的最小生成树可以直接套用模板
#include<stdio.h>#include<string.h>#define inf 0x3f3f3f3fint G[1001][1001];int vis[1001],lowc[1001];void init(int x,int y,int v){ G[x][y]=v; G[y][x]=v; return;}int prim(int G[][1001],int n){ int i,j,p,minc,res=0; memset(vis,0,sizeof(vis));//全部初值为0表示没有访问过; vis[1]=1; for(i=2;i<=n;i++) lowc[i]=G[1][i]; for(i=2;i<=n;i++){ minc=inf; p=-1; for(j=1;j<=n;j++){ if(vis[j]==0&&lowc[j]<minc) {minc=lowc[j];p=j;} } if(inf==minc) return -1;//原图不连通 res+=minc; vis[p]=1; for(j=1;j<=n;j++){//更新lowc[] if(vis[j]==0&&lowc[j]>G[p][j]) lowc[j]=G[p][j]; } } return res;}int main(){ int n,m; int x,y,w; while(~scanf("%d %d",&n,&m)){ memset(G,inf,sizeof(G)); while(m--){ scanf("%d%d%d",&x,&y,&w); init(x,y,w); } printf("%d\n",prim(G,n)); }}
阅读全文
0 0
- 51nod 1212 无向图最小生成树
- 51 nod 1212 无向图最小生成树
- 51nod 1212 无向图最小生成树
- 51nod 1212 无向图最小生成树
- 51nod 1212 无向图最小生成树
- 51nod 1212 无向图最小生成树
- 51nod:1212 无向图最小生成树
- 51Nod 1212 无向图最小生成树
- 51nod 1212 无向图最小生成树
- 51Nod 1212 无向图最小生成树
- 51nod 1212 无向图最小生成树
- 20141004 【 图论 -- 最小生成树(Dijkstra) 】 51nod 1212 . 无向图最小生成树
- 51nod 1212 无向图最小生成树(最小生成树)
- 51Nod 1212 无向图最小生成树(最小生成树Kruskal & Prim
- 51nod 1212 无向图最小生成树(输出生成树)
- 51nod 1212 无向图最小生成树 (Kruskal)
- 51nod 1212 无向图最小生成树prim算法
- 51Nod-1212-无向图最小生成树
- C++ operator关键字(重载操作符)
- Pandas中修改DataFrame列名
- 我要写算法(一)—— 最快最简单排序之桶排序
- 接口 动物声音模拟器
- Codeforces Round #368 (Div. 2) D. Persistent Bookcase(dfs)
- 51nod 1212 无向图最小生成树
- Tiling_easy version——找规律
- 双向数据绑定
- 递归练习(二)
- Unity自学之路——UGUI 富文本
- 诗歌之美与诗意之存在
- jdbc之dbcp和c3p0的区别
- ASP.NET C#后台调用公网接口(GET, POST)
- linux常用终端指令+如何用vim写一个c程序并运行