prim算法
来源:互联网 发布:js中修改class 编辑:程序博客网 时间:2024/06/07 11:16
prim算法:
第一步:先任意选择一个点作为 最小生成树 的起始点。
第二步:然后找出所有点中 到 最小生成树 的最小距离的点。又加入最小生成树
第三步:然后再更新 所有点 到最小生成树的 距离。
再重复第二三步。一直到n个点都被加入进来了。
例题:hdu 1102
#include<iostream> #include<cstdio> using namespace std; #define INF 0x1f1f1f1f//定义一个整数常量,表示无穷大 //prim函数返回得到的最小生成树的n-1条边的权值和 //参数cost 为表示图的矩阵,n为顶点个数 int prim(int cost[][200],int n) { //low表示每个点到生成树的最小距离,vis表示一个点是否已加入生成树中 int low[10000],vis[10000]={0}; int i,j,p; int min,res=0; vis[0]=1; for(i=1;i<n;i++)low[i]=cost[0][i]; for(i=1;i<n;i++) { min=INF;p=-1; for(j=0;j<n;j++) { if(0==vis[j]&&min>low[j]) { min=low[j]; p=j; } } //min==INF说明找不到能够加入的点了,说明图是不连通的 if(min==INF)return -1; res+=min; vis[p]=1; for(j=0;j<n;j++) { if(0==vis[j]&&low[j]>cost[p][j]) { low[j]=cost[p][j]; } } } return res; } int main() { int n; int a[200][200]; while(cin>>n) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%d",&a[i][j]); } } int q; scanf("%d",&q); for(int i=0;i<q;i++) { int u,v; scanf("%d%d",&u,&v); a[u-1][v-1]=a[v-1][u-1]=0; } int res=prim(a,n); printf("%d\n",res); } return 0; }
- prim 算法
- Prim算法
- Prim算法
- prim算法
- Prim算法
- Prim算法。
- Prim 算法
- Prim算法
- prim算法
- Prim算法
- Prim算法
- Prim算法
- prim算法
- prim算法
- Prim算法
- Prim算法
- prim算法
- prim算法
- BRISK 在VS2010 OpenCV2.44中的运行
- 设计模式——装饰设计模式
- ubuntu下hadoop全分布安装
- 湫湫系列故事——减肥记II
- 如何使用LdapConnection 类链接 Ldap服务器
- prim算法
- JBoss 系列二十九:JBoss Data Grid(Infinispan)Football 示例
- android开发总结
- java解决中文转换问题
- C语言内存管理详解
- redis 安装
- 设置或清除特定位
- Actionbar的使用
- jdk 1.5新特性——可变参数、Foreach