HNUST--2187 最小生成树(邻接矩阵或邻接表)
问题描述:
输入
第一行:输入总顶点数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.图的邻接矩阵表示法 图是由顶点和边或弧两部分组成.图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组表示图,一个一维数组存储图中的顶点信息,一个二维数组(邻接 ...
- 图的两种存储方式---邻接矩阵和邻接表
图:图是一种数据结构,由顶点的有穷非空集合和顶点之间边的集合组成,表示为G(V,E),V表示为顶点的集 合,E表示为边的集合. 首先肯定是要对图进行存储,然后进行一系列的操作,下面对图的两种存储方式邻 ...
- 邻接矩阵和邻接表的相互转化
#include <iostream> #define MaxNum 100 using namespace std; //邻接矩阵 typedef struct{int Vex[MaxN ...
- 图的两种存储形式(邻接矩阵、邻接表)
图可以使用两种存储结构,分别是邻接矩阵和邻接表. 注意:一个图所对应的邻接矩阵唯一,所对应的邻接表不唯一 一.邻接矩阵 邻接矩阵以矩阵的形式存储图所有顶点间的关系.邻接矩阵具有以下特点: 1.邻接矩阵 ...
- 图的表达与遍历--邻接矩阵和邻接表
今天开始准备学习一个新的数据结构---图,貌似听着挺复杂的,当然实际也不容易啦,所以先从理论上对图有个大概的认识,其实之前咱们学的二叉树就是一种特殊的图,怎么个特殊法呢?因为它没有环,但是图是可以,它 ...
- 将图的广度优先遍历在邻接矩阵和邻接表存储结构上分别实现_图解:什么是“图”?
从今天开始,我们开始介绍图的相关算法 什么是"图" 1.背景 作为图的开始,我们先来看一个经典的问题,它被认为是图论的起源. 这个问题是基于一个现实生活中的事例:河中心有两个小岛. ...
- 邻接矩阵和邻接表的使用
邻接矩阵和邻接表的使用 邻接矩阵 为了遍历一个图,我们使用了邻接矩阵,及用ai,ja_{i,j}ai,j表示由a到b的边权 注:若这两个点不相连或i=ji=ji=j,那么这个值就会设定为一个非正常的 ...
- 实现图的邻接矩阵和邻接表存储
/** * 实验题目: * 实现图的邻接矩阵和邻接表存储 * 实验目的: * 领会图的两种主要存储结构和图基本运算算法设计 * 实验内容: * ...
- 图的存储-邻接矩阵和邻接表之间的相互转化
邻接矩阵和邻接表之间的相互转化,输出邻接矩阵和邻接表算法实现. 将文件保存为GraphBasicOperation.cpp文件,具体实现如下: #include <stdio.h> #in ...
- C语言:将邻接矩阵转换为邻接表算法
题目 设计一个将邻接矩阵转换为邻接表的算法: 分析 在图 G 中的邻接矩阵 G 中查找值不为 0,不为∞的元素,若找到这样的元素.例如,G.edges[i][j],表示存在一条边,创建一个 adjve ...
最新文章
- Scalable IO in Java
- MySQL给一个字段递增赋值
- Paper Pal:一个中英文论文及其代码大数据搜索平台
- SAP License:最近事情的一些随笔
- 概率霍夫变换(Progressive Probabilistic Hough Transform)原理详解
- 【java】Applet窗口小程序的应用
- Visual studio +Intel Fortran 环境安装与设置
- 开机出现 A disk read error occurred Press 时怎么办
- 这篇文章不错,仔细读读,码农晋升为技术管理者后,痛并快乐着的纠结内心...
- 使用kvm部署虚拟化服务器,KVM虚拟化(KVM的部署及使用)
- 警惕分布式常见的这十大坑
- python基本运算符号有哪些
- BT下载不死!Magnet(磁力链接)开创网络BT2.0时代!!
- 拍乐云受邀2021亚太CDN峰会,技术创新赋能行业新价值
- STM32初学自学体验,新手经验
- 微信小程序源码分享合集-4
- Part2:面向对象、原型链、函数、ES6基础语法
- 思科拓扑----小型网络架构练习
- 外贸人SOHO怎么收汇?2020最新外贸B2B收款结汇方法详解!
- Windows系统自带便签