最小生成树-prim算法
来源:互联网 发布:欧姆龙传感器淘宝 编辑:程序博客网 时间:2024/06/16 14:08
最小生成树( MIT )的经典解决方法有2种:prim算法和kruskal算法,其中prim算法 从一个任意根节点开始,一直长大覆盖到整棵树。
算法需要3个数组来实现:
arr[i][j]:存放点到点之间的权值,初始值为最大值,若 是该两点之间有边则改变权值
a[i]:表示以i为终点的边的最小权值,当lowcost[i]=0说明以i为终点的边的最小权值=0,也就是表示i点加入了MST
s[i]:表示对应lowcost[i]的起点,即说明边< mst[i],i>是MST的一条边,当mst[i]=0表示起点i加入MST
//实现找到图中的最小生成树并将其权值和返回#include<iostream>#include<cstring>using namespace std;const int maxn=10000;int arr[maxn][maxn];//存放点点间权值 int prims(int arr[][maxn],int n){ int a[maxn]; int s[maxn]; int i,j,min,minid,sum=0; for(i=2;i<=n;i++) { a[i]=arr[1][i]; s[i]=1; } s[1]=0; for(i=2;i<=n;i++) { min=maxn; minid=0; for(j=2;j<=n;j++) { if(a[j]<min&&a[j]) { min=a[j]; minid=j; } } cout<<"v"<<s[minid]<<"v"<<minid<<"="<<min<<endl; a[minid]=0; sum+=min; for(j=2;j<=n;j++) { if(arr[minid][j]<a[j]) { a[j]=arr[minid][j]; s[j]=minid; } } } return sum;}int main(){ int i,j,n,m,k,c; cin>>n>>m;//n:顶点数 m:边数 for(i=1;i<=n;i++) for(j=1;j<=n;j++) arr[i][j]=maxn; for(k=1;k<=m;k++) { cin>>i>>j>>c; arr[i][j]=c; arr[j][i]=c; } c=prims(arr,n); cout<<c<<" "; return 0;}
阅读全文
0 0
- Prim最小生成树算法
- 最小生成树Prim算法
- 最小生成树Prim算法
- 最小生成树----Prim算法
- 最小生成树Prim算法
- Prim 最小生成树算法
- 最小生成树:Prim算法
- Prim算法 ----最小生成树
- 最小生成树-prim 算法
- 最小生成树(prim算法)
- 最小生成树 prim算法
- 最小生成树 prim算法
- Prim最小生成树算法
- 最小生成树prim算法
- 最小生成树--prim算法
- 最小生成树Prim算法
- 最小生成树(Prim算法)
- 最小生成树----Prim算法
- poj 1961 Period
- python实现单例模式
- 如何转载别人的博客
- S5PV210开发 -- 通信
- php微信公众号开发,入门篇(实现了关注公众号发送欢迎信息,发关键词自回复)
- 最小生成树-prim算法
- 【java基础:IO】Java的IO知识整理!
- azkaban 编译使用方法
- Maven建立父子关系项目工程,建立依赖关系结构
- V4L2源代码之旅八:ioctl
- 机器学习和数据挖掘4——NumPy快速入门
- Corodva Plugin.xml 配置文件详解
- select标签设置只读的方法(下拉框不可选但可传值)
- 命令详解查看文件cat、more、less、head、tail、wc、grep、echo