/* 普利姆算法求解最小生成树,它有两个集合,已选点构成一个集合,未被选出的点都成那个一个集合
需要三个辅助的数组,adjvex[n]储存边的起点
lowcost[n]用来储存选出边的权值,vexs[n]用来储存终结点 ,他们需要 一一对应 ,起初所有节点的
间的权值都为无穷大,选出一个起始节点,把它的临结点的所有边的权值,按照顺序存入数组vexs,起始节点存放入adjex,
(根据邻接矩阵,如果它是第j行第 i列,就把边的权值存放在loecost[i]中,权值,起始点,和终点存入数组的下标一致),
然后选出和起始节点相连接的权值最小的临结点,输出对应的起点和终点,然后让这个边的权值变为无穷大,表示已经选出该边
然后这个点的所有边的权值记录到数组lowcost[n]中 ,把这个结点值存入到adjvex[n],然后重复此步骤,选出n-1条边。
*/
#include <stdio.h>
#include<iostream>
#include <string.h>
#define maxint 32726
#define  maxvex 100
#define max 100
int sum=0;
using namespace std;
typedef struct{char vexs[maxvex];int arcs[maxvex][maxvex];int vexnum,arcnum;
}Amg;//邻接矩阵查找节点的位置 int locate(char vexs[] , char vex,int n){int i,j;for(i=1;i<=n;i++){if(vexs[i]==vex){j=i;}}return j;} //用邻接矩阵建立图
void Creat1UND(Amg &G){char v1,v2;//两个顶点的值 int w;//边的权值 int q,e;//顶点的坐标 printf("请输入顶点数和边数:");cin>>G.vexnum>>G.arcnum;printf("请输入各顶点的值:\n"); for(int i=1;i<=G.vexnum;i++){cin>>G.vexs[i];}for(int i=1;i<=G.vexnum;i++){for(int j=1;j<=G.vexnum;j++){G.arcs[i][j]=maxint;}}printf("请输入两个顶点以及权值;\n");for(int k=1;k<=G.arcnum;++k){cin>>v1>>v2>>w; q=locate(G.vexs,v1,G.vexnum);e=locate(G.vexs,v2,G.vexnum);G.arcs[q][e]=w;}for(int i=1;i<=G.vexnum;i++){for(int j=1;j<=G.vexnum;j++){printf("%-10d  ",G.arcs[i][j]) ;}printf("\n");}}
//普里姆算法求最小生成树
void Minitree(Amg &G,char u){char adjvex[G.vexnum+1]={0};//记录起始点的数组 int lowcost[G.vexnum+1];//储存权值 for(int i=1;i<=G.vexnum;i++){//起初所有节点都没选出,权值都为无穷 lowcost[i]=maxint ;}int min=maxint;//用来比较的值 int m,b=locate(G.vexs,u,G.vexnum); //找出第一个结点的下标 lowcost[b]=maxint ;for(int i=1;i<=G.vexnum;i++){//把它的所有临结点的权值存入lowcost中 if(G.arcs[b][i]<maxint){adjvex[i]=G.vexs[b];//对应边的起始点 lowcost[i]=G.arcs[b][i];}}for(int i=1;i<G.vexnum;i++){//n-1 次循环 for(int j=1;j<=G.vexnum;j++){if(lowcost[j]<min){//找出最小边的权值 min=lowcost[j];m=j;}}sum+=min;//记录权值 printf("最小生成树为:"); printf("<%c %c> ",adjvex[m],G.vexs[m]);//输出这个边 lowcost[m]=maxint;//将选出边的权值改为无穷 min=maxint;//更新最小值for(int k=1;k<=G.vexnum;k++){if(G.arcs[m][k]<maxint){//将选出新的结点的所有临结点的权值进入数组中,并还有对应的起始点 adjvex[k]=G.vexs[m]; lowcost[k]=G.arcs[m][k];}} }printf("权值和为:%d",sum);
}
/*
输入结点数 6 边数 10
各个结点和权值
1 3 1
3 4 5
1 4 5
1 2 5
2 3 5
2 5 3
5 3 6
5 6 6
6 4 2
3 6 4
*/
int main(){char b;Amg G;Creat1UND(G);cin>>b;Minitree(G, b);return 0; }

普里姆算法构造最小生成树相关推荐

  1. 我所知道的十大常用算法之普里姆算法(最小生成树)

    前言需求 今天我们学习的是普里姆算法,我们还是从一个场景里引入看看 有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通 1.各个村庄的距离用边线表示(权) ,比如 A ...

  2. 最小生成树普里姆算法c语言代码,普里姆算法生成最小生成树-C语言描述.doc

    PAGE JIN JINGCHU UNIVERSITY OF TECHNOLOGY <数据结构(C语言描述)> 课程设计 学 院 计算机工程学院 班 级 12级软件技术1班 学 号 201 ...

  3. 普里姆算法求最小生成树(简易算法版)

    普里姆算法求最小生成树与之前发的迪杰斯特拉算法求最小生成树的思想类似,都是用到一个dis数组,不过与迪杰斯特拉算法不同的是,之前迪杰斯特拉算法求最短路里dis存储的是源点到各点的最短路,每次循环找离源 ...

  4. 实验题6.3 采用普里姆算法求最小生成树

    [实验目的] (1)掌握图的最小生成树的概念: (2)熟练掌握用采用普里姆算法求最小生成树的方法及操作. [实验准备] (1)阅读教材中图的最小生成树相关内容: (2)熟悉普里姆算法. [实验要求] ...

  5. 编程中十大常用算法:(六)普里姆算法(最小生成树)

    背景 修路问题: (1)有七个村庄(A-G),现需要修路把7个村庄连通 (2)各个村庄的距离用边线(权值)表示,例如村庄A到村庄B的距离为5公里 求: 如何修路保证各个村庄都能连通,并且总的修建公路总 ...

  6. 采用普里姆算法求最小生成树

    目的:领会普里姆算法求带权连通图中最小生成树的过程和相关算法设计. 内容:编写一个程序exp8-5.cpp,实现求带权连通图最小生成树的普里姆算法.对于如图8.55所示的带权连通图G,输出从顶点0出发 ...

  7. 1129-2019-算法-普里姆算法(最小生成树MST-Prim算法)

    最小生成树MST(Minimum Cost Spanning Tree ) 普里姆算法和克鲁斯卡尔算法 Prim算法 目的:求出最小连通子图 package Prim;import java.util ...

  8. 第六章图-算法6.8普里姆算法

    第六章图-算法6.8普里姆算法 代码实现 #pragma once #include <iostream>using namespace std;//图的邻接矩阵存储(创建无向图) //表 ...

  9. 两种构造最小生成树的算法(普里姆算法,克鲁斯卡尔算法)

    (一)普里姆算法 普里姆算法求最小生成树:从生成树中只有一个顶点开始,到定点全部进入生成数为止: 2.克鲁斯卡尔算法. 思想:将所有边按其权值从小到大排一遍,从小到大依次选取边,加入最小生成树中,若加 ...

最新文章

  1. mysql 排序取前4_MySQL时间段分组排序后取前10的问题?
  2. python 合并 循环list_阿里巴巴鼎力推荐,Python入门至精通,24招加速你的Python
  3. 产品经理,你们做产品最孤独的时刻是什么?
  4. Spring源码(1)
  5. 对 精致码农大佬 说的 Task.Run 会存在 内存泄漏 的思考
  6. ad采样做按键开关_磐石按键测试机解决各种按键测试问题
  7. mysql报11004_使用mysqli扩展技术查看服务器连接错误报告的方法
  8. 信息学奥赛C++语言:尼克的岁数
  9. html5图像映射坐标怎么看,html学习之创建图像映射
  10. css 宋体_6.CSS字体属性
  11. 多线程 Threading Multiprocessing(Python)
  12. 厦门理工学院android用药软件文献综述,厦门理工学院毕业论文规范.doc
  13. php ctype xdigit,php ctype_digit() 函数介绍
  14. 干货——MRD(市场需求文档)模板
  15. JAVA求班级男女生比例_java编程:给你一个班级的名单,随机分成6个组的问题解决办法...
  16. Word电子扫描仪 word文档转换为图片Pdf,Word文档扫描成Pdf,word文档加密 word转图片 word转pdf
  17. 4月热搜:揭秘金融级人脸实名认证解决方案背后的技术硬货
  18. 趋势科技发布《2007年病毒威胁报告暨2008年预测》
  19. 手把手教学:使用油猴脚本对CCTV央视网启用HTML5播放器
  20. 动作捕捉助力人-机运动协同性辅助侧翻康复辅具设计

热门文章

  1. 基于unity的飞行模拟设计
  2. Kubernetes Multus-CNI
  3. redis 主从同步搭建 - 七脉 - 博客园
  4. matlab氢原子杂化轨道,用matlab实现氢原子的sp杂化轨道可视化
  5. Java常见类库与工具及官网
  6. 《锋迷商城》——用户认证
  7. CVE-2022-1162 Gitlab 硬编码漏洞复现
  8. 手机pdf文件转语音_谁说手机无法编辑PDF文件?看我这样操作!什么文档都不在话下...
  9. 图书管理系统IO流版
  10. imu 里程计融合_地图影像与IMU及里程计集成的探测车定位