问题描述:

输入

第一行:输入总顶点数n,总边数e,以空格隔开。其中n不超过50,e不超过1000。
第二行:输入n个顶点的名称(char类型)
随后输入e行:每行输入1条边依附的顶点及权值,如a b 5

输出

先输出n-1行,对应构造的最小生成树的n-1条边,格式为“(边端点,边端点):边权值"
最后输出最小生成树的总代价值,格式为"minCost=总代价值"。请注意行尾输出换行。

样例输入 Copy

6 10
a b c d e f
a b 6
a c 1
a d 5
b c 5
b e 3
c d 5
c e 6
c f 4
d f 2
e f 6

样例输出 Copy

(a,c):1
(c,f):4
(f,d):2
(c,b):5
(b,e):3
minCost=15
#include <iostream>using namespace std;int main()
{int n,m,i,j,k,index,flag,min,t3;char t1,t2;char vex[7];int e[50][50],dis[50],book[50]={0};//数组dis来记录生成树到各个顶点的距离,即最短距离//一维数组book标记有哪些顶点已经加入生成树,加入值为1int inf=9999999;int count=0,sum=0;cin>>n>>m;//n为顶点,m为边数//初始化领接矩阵for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==j) e[i][j]=0;else e[i][j]=inf;}}//读入顶点for(i=1;i<=n;i++){cin>>vex[i];}//读入边for(i=1;i<=m;i++){int a,b;cin>>t1>>t2>>t3;for(j=1;j<=n;j++){if(t1==vex[j])a=j;if(t2==vex[j])b=j;}e[a][b]=t3;e[b][a]=t3;}//1号顶点到各个顶点的初始距离for(i=1;i<=n;i++){dis[i]=e[1][i];}book[1]=1;index=1;//1号加入生成树;count++;//count为生成树个数//prim核心while(count<n){flag=0;min=inf;for(i=1;i<=n;i++){if(book[i]==0&&dis[i]<min)//已经是生成树顶点的不予考虑{min=dis[i];j=i;}}//j只是个中间变量book[j]=1;count++;sum+=dis[j];for(i=1;i<=n;i++){if(e[j][i]==dis[j])index=i;}cout<<"("<<vex[index]<<","<<vex[j]<<")"<<":"<<dis[j]<<endl;//题目要求格式//扫描顶点j的边,更新生成树到每一个非树顶点的距离for(k=1;k<=n;k++){if(book[k]==0&&dis[k]>e[j][k]){dis[k]=e[j][k];flag=1;}}if(flag==1)index=j;}cout <<"minCost="<<sum<< endl;return 0;
}

值得记录的点:

为防止出现机械性重复,要对顶点进行判断,例如,e[4][j](对应d)数组中的六个数据皆比dis中大,所以未进入循环,此时flag为0。退而求此次,此时的index是6(对应f),在while大循环中,dis找到的min是5,下标为2,对应b,此刻关键在于,哪个顶点与b相连接的边权值为5,来个循环遍历找到对应的下标,更新index!!!

​​​​​​​

HNUST--2187 最小生成树(邻接矩阵或邻接表)相关推荐

  1. 图——图的存储结构(邻接矩阵和邻接表法)

    图的五种存储结构: 1.图的邻接矩阵表示法 图是由顶点和边或弧两部分组成.图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组表示图,一个一维数组存储图中的顶点信息,一个二维数组(邻接 ...

  2. 图的两种存储方式---邻接矩阵和邻接表

    图:图是一种数据结构,由顶点的有穷非空集合和顶点之间边的集合组成,表示为G(V,E),V表示为顶点的集 合,E表示为边的集合. 首先肯定是要对图进行存储,然后进行一系列的操作,下面对图的两种存储方式邻 ...

  3. 邻接矩阵和邻接表的相互转化

    #include <iostream> #define MaxNum 100 using namespace std; //邻接矩阵 typedef struct{int Vex[MaxN ...

  4. 图的两种存储形式(邻接矩阵、邻接表)

    图可以使用两种存储结构,分别是邻接矩阵和邻接表. 注意:一个图所对应的邻接矩阵唯一,所对应的邻接表不唯一 一.邻接矩阵 邻接矩阵以矩阵的形式存储图所有顶点间的关系.邻接矩阵具有以下特点: 1.邻接矩阵 ...

  5. 图的表达与遍历--邻接矩阵和邻接表

    今天开始准备学习一个新的数据结构---图,貌似听着挺复杂的,当然实际也不容易啦,所以先从理论上对图有个大概的认识,其实之前咱们学的二叉树就是一种特殊的图,怎么个特殊法呢?因为它没有环,但是图是可以,它 ...

  6. 将图的广度优先遍历在邻接矩阵和邻接表存储结构上分别实现_图解:什么是“图”?

    从今天开始,我们开始介绍图的相关算法 什么是"图" 1.背景 作为图的开始,我们先来看一个经典的问题,它被认为是图论的起源. 这个问题是基于一个现实生活中的事例:河中心有两个小岛. ...

  7. 邻接矩阵和邻接表的使用

    邻接矩阵和邻接表的使用 邻接矩阵 为了遍历一个图,我们使用了邻接矩阵,及用ai,ja_{i,j}ai,j​表示由a到b的边权 注:若这两个点不相连或i=ji=ji=j,那么这个值就会设定为一个非正常的 ...

  8. 实现图的邻接矩阵和邻接表存储

    /** *    实验题目: *        实现图的邻接矩阵和邻接表存储 *    实验目的: *        领会图的两种主要存储结构和图基本运算算法设计 *    实验内容: *       ...

  9. 图的存储-邻接矩阵和邻接表之间的相互转化

    邻接矩阵和邻接表之间的相互转化,输出邻接矩阵和邻接表算法实现. 将文件保存为GraphBasicOperation.cpp文件,具体实现如下: #include <stdio.h> #in ...

  10. C语言:将邻接矩阵转换为邻接表算法

    题目 设计一个将邻接矩阵转换为邻接表的算法: 分析 在图 G 中的邻接矩阵 G 中查找值不为 0,不为∞的元素,若找到这样的元素.例如,G.edges[i][j],表示存在一条边,创建一个 adjve ...

最新文章

  1. Scalable IO in Java
  2. MySQL给一个字段递增赋值
  3. Paper Pal:一个中英文论文及其代码大数据搜索平台
  4. SAP License:最近事情的一些随笔
  5. 概率霍夫变换(Progressive Probabilistic Hough Transform)原理详解
  6. 【java】Applet窗口小程序的应用
  7. Visual studio +Intel Fortran 环境安装与设置
  8. 开机出现 A disk read error occurred Press 时怎么办
  9. 这篇文章不错,仔细读读,码农晋升为技术管理者后,痛并快乐着的纠结内心...
  10. 使用kvm部署虚拟化服务器,KVM虚拟化(KVM的部署及使用)
  11. 警惕分布式常见的这十大坑
  12. python基本运算符号有哪些
  13. BT下载不死!Magnet(磁力链接)开创网络BT2.0时代!!
  14. 拍乐云受邀2021亚太CDN峰会,技术创新赋能行业新价值
  15. STM32初学自学体验,新手经验
  16. 微信小程序源码分享合集-4
  17. Part2:面向对象、原型链、函数、ES6基础语法
  18. 思科拓扑----小型网络架构练习
  19. 外贸人SOHO怎么收汇?2020最新外贸B2B收款结汇方法详解!
  20. Windows系统自带便签

热门文章

  1. 姿态估计之3D 人体姿态估计 - 总结(1)【转】
  2. 通过js获取本地IP地址
  3. hive开窗/窗口函数
  4. 在WebGL场景中管理多个卡牌对象的实验
  5. Postman设置代理抓取手机上的请求
  6. 采集企业老板的10个经典方法
  7. Java虚拟机笔记-对象
  8. 我为什么反对把Enter作为发送快捷键
  9. oracle中replace into,oracle SELECT INTO 和 replace into SELECT 两种表复制语句详解
  10. Windows XP服务详解