Prim算法代码实现

求无向网的最小生成树的算法有两种:Prim和Kruskal,它们都是利用最小生成树的MST性质得到的。我们先来介绍Prim算法,Kruskal我们后续介绍。

Prim算法思想:
逐渐长成一棵最小生成树。假设G=(V,E)是连通无向网,T=(V,TE)是求得的G的最小生成树中边的集合,U是求得的G的最小生成树所含的顶点集。初态时,任取一个顶点u加入U,使得U={u},TE=Ø。重复下述操作:找出U和V-U之间的一条最小权的边(u,v),将v并入U,即U=U∪{v},边(u,v)并入集合TE,即TE=TE∪{(u,v)}。直到V=U为止。最后得到的T=(V,TE)就是G的一棵最小生成树。也就是说,用Prim求最小生成树是从一个顶点开始,每次加入一条最小权的边和对应的顶点,逐渐扩张生成的。


代码片如下
#include
#include
#include
#include
using namespace std;
int b[100][100]={0};//储存信息
int s[100]={0};//顶点是否被标记过
int F[100][100]={0};//F标记两个顶点的边是否被标记过
int m=100,n;//m为初始化权值
int v[100][150];//v[k][0]存储与k连接的节点,v[k][1]存储边的权值
//初始化图,让图从开始节点找出最小的边,并保存在v中
void intial(){
int b[10][10]={{0,1,6},{0,2,1},{0,3,5},{1,2,5},{1,4,3},{2,3,5},{2,4,6},{2,5,4},{3,5,2},{4,5,6}};
//对顶点遍历
for(int k=0;k<6;k++)
//对边遍历
for(int i =0;i<10;i++){
//判断要找的点是否被标记过,并取相应点的最小边
if(b[i][0]==k && s[b[i][1]] == 0 && b[i][2]<=v[k][1]){
//看相邻两个点的边是否被标记过
if(F[k][v[k][0]]==0){

             v[k][0]=b[i][1];v[k][1]=b[i][2];}}

}
}

void prim(){
int b[10][10]={{0,1,6},{0,2,1},{0,3,5},{1,2,5},{1,4,3},{2,3,5},{2,4,6},{2,5,4},{3,5,2},{4,5,6}};
//初始化v的值 ,便于求最小值
for (int i=0;i<6;i++)
{
v[i][0]=50;
v[i][1]=50;
}
//对顶点遍历
for(int k=0;k<6;k++) {

//对边遍历 for(int j =0;j<10;j++){//判断要找的点是否被标记过,并取相应点的最小边 if((F[b[j][0]][b[j][1]]==0) && (s[b[j][1]] + s[b[j][0]] == 1) && (b[j][2]<=v[k][1])&&b[j][0]==k){//判断两个顶点之间有哪一个是被标记过的,没标记的点赋值给v[k][0] if(s[b[j][1]] != 0){v[k][0]=b[j][0];v[k][1]=b[j][2];}else{}if(s[b[j][0]]!=0){v[k][0]=b[j][1];v[k][1]=b[j][2];}else{}//用m储存边权值的最小值 ,n存贮在剩下的点中的最小权重的点 if(v[k][1]<= m){m=v[k][1];n=v[k][0]; }}}}}

void print(){

int p=0;
int h=0;

// 5比较特殊,特别对待
s[5]=1;
while(h<3){
if(s[p]==0&&p<5){
//输出节点数
cout <<“V”<<p<<“的下一个节点为”<<“V”<<v[p][0]<<"\n"<<endl;
F[p][v[p][0]]=1;
F[v[p][0]][p]=1;
s[p]=1;
p=v[p][0];
}
h++;

}
//第一轮搜索结束后,继续完成后续工作
while(h<6){

prim();
s[n]=1;
F[n][p]=1;
F[p][n]=1;
cout <<"V"<<p<<"的下一个节点为"<<"V"<<n<<"\n"<<endl;
p=n;
m=100;
h++;
}

}

int main(){

for (int i=0;i<6;i++){v[i][0]=50;v[i][1]=50;}intial();
cout<<"准备好了吗,开始执行prim算法了......开始节点是:V0"<<"\n"<<endl;
print();
cout<<"还在看吗?已经结束了哦。。。。。"<<endl;
return 0;

}

prim算法之处女作相关推荐

  1. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  2. 基本数据结构(图: 基本结构,DFS,prim算法, kruskal算法)

    #include <iostream> using namespace std; //约定: //1. 图是由很多节点(VERTEX)构成的, 因此图结构是由一个VERTEX的链表构成的, ...

  3. 【数据结构】最小生成树 Prim算法 Kruskal算法

    最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...

  4. HDU1863(Prim算法)

    方法一:Prim算法 #include<iostream> #include<algorithm> #include<cstring> #include<ve ...

  5. 生成树的概念,最小生成树Prim算法 Kruskal算法

    求解最小生成树可以用Prim算法 Kruskal算法

  6. 三十七、Prim算法--求解最小生成树

    一.Prim算法介绍 普利姆(Prim)算法求最小生成树,也就是在包含 n 个顶点的连通图中,找出只有(n-1)条边包含所有 n 个顶点的 连通子图,也就是所谓的极小连通子图 普利姆的算法如下: 设 ...

  7. POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法

    首先,纪念我用Linux系统AC的第一题-   安装这个万恶的NOI Linux系统费了6小时的时间,不过好在最后终于装上了,但是因为我安装的Linux系统比较烂,还遭到了小花儿和js的鄙视,唉,本人 ...

  8. 一步一步写算法(之prim算法 中)

    原文:一步一步写算法(之prim算法 中) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] C)编写最小生成树,涉及创建.挑选和添加过程 MI ...

  9. Prim算法生成迷宫

    初始化地图 function initMaze(r,c){let row = new Array(2 * r + 1)for(let i = 0; i < row.length; i++){le ...

最新文章

  1. iOS架构篇-3 网络接口封装
  2. RUST等差分解一个数
  3. ubuntu 下 Could not get lock /var/lib/dpkg/lock解决方案
  4. php适配器模式应用,什么是适配器模式,它有哪些应用场景
  5. python 数据分析学什么-如何学习Python数据分析呢?老男孩Python培训
  6. 全民超神VS王者荣耀:从角色养成到账户养成
  7. WebCast《实战ASP.NET AJAX系列课程(2):使用客户端框架创建“纯粹”的Ajax应用程序》相关资源...
  8. get占位符传多个参数_mybatis多个参数(不使用@param注解情况下),sql参数占位符正确写法...
  9. 【Codeforces Round #442 (Div. 2) C】Slava and tanks
  10. FLASH AS3 TextField
  11. os.path 大全
  12. 行业点评:大疆反腐事件,员工的反驳
  13. Python实现IP地址归属地查询
  14. 长春技师学院计算机专业,中专院校 / 中专技校 / 长春市技师学院
  15. 5配置单臂路由器 VLAN 间路由
  16. mine 规范_模型规范要求
  17. 软件研发的6sigma案例解析
  18. iOS 通过定位获取常驻后台
  19. LDO(低压差线性稳压器)选型小结
  20. Android 实现扑克牌动画,Android扑克牌猜点小游戏源码

热门文章

  1. Matplotlib饼图实例
  2. html弹窗广告文件怎么做,视频加入广告 如何在视频文件中加入弹窗广告
  3. 经验总结:青春豆的治疗方法
  4. 分享一套PHP的cms系统,免授权可商用,零元CMS企业官网系统,采用laravel+admin架构的企业建站系统
  5. 微信开发系列 — — 微信模板消息
  6. 标准I/O和系统I/O的本质区别
  7. Kubelet Eviction Manager工作机制
  8. 解决Win系统cad激活安装失败问题,AutoCad 2022 中文/英文正式详细安装教程
  9. C#语言中的重要知识详细介绍
  10. 7-65 平面向量加法 (15分)