Blog 5.第六章 图的认识

一、图的存储结构

图的数组(邻接矩阵)存储表示:

优点:1/0表示方便

缺点:不利于增加删除顶点

特殊:时间复杂度较高,不稀疏图;不过在无向图,可利用下三角形来压缩处理空间。

例子1:

(需要辅助数组)

来源:https://www.cnblogs.com/XMU-hcq/p/6065057.html

例子2:

(1/0替换成当下边的权值)

来源:https://blog.csdn.net/luoweifu/article/details/9270693

图的邻接表存储表示:

来源:https://www.cnblogs.com/XMU-hcq/p/6065057.html

包括:表头结点表(按顺序存放),边表(链表)

优点:增删方便

缺点:不利于判断顶点之间是否有边(需要一一遍历),且不便于计算度。

备注:在对图的增加删除操作时,便可链接到前面所学的链表增加删除操作。

并且增加顶点用头插法,增加删除操作时注意while循环条件有所不同:

前者是(p!=NULL)插入有n+1种情况

后者是(p->next=NULL)删除有n种情况

二、图的两种遍历深度搜索、广度搜索

深度搜索个人认为和树的先序搜索逻辑相似,广度搜索与层次遍历相似。

而搜索有分基于哪种存储结构以及是否采用递归来体现,并且遍历连通图还是非连通图。

备注:由于顶点只能被访问一次,因此可借助辅助数组、队列等来判断。

void DFS(Graph G, int v) {
   // 从顶点v出发,深度优先搜索遍历连通图 G
    visited[v] = True;
    for(w=FirstAdjVex(G, v);
             w>=0; w=NextAdjVex(G,v,w))
        if (!visited[w]) DFS(G, w);
              // 对v的尚未访问的邻接顶点w
              // 递归调用DFS
} // DFS
 非递归实现:
visited[i]=false;//栈S初始化
访问顶点v;visited[v]=true;//顶点v入栈S
while(S!=NULL)
 {
 x=栈S的顶元素//不出栈;
if(visited[w])
cout<<w;
visited[w]=1;
 w进栈;
  else
 x出栈;}

广度搜索:

类比层次以及上述栈的实现:

1.从图中某个顶点v出发,访问v,并置visited[v]的值为true,然后将v 进队。
2.只要队列不空,则重复下述处理:
   (1)队头顶点u出队。
   (2)依次检查u的所有邻接点w,如果visited[w]的值为false,则访问w,并置visited[w]的值为true,然后将w进队。

三、图的应用

最小生成树:普里姆算法、克鲁斯卡尔算法。

区别:

普里姆算法
 归并顶点,与边数无关,适于稠密网。
克鲁斯卡尔算法
 归并边,适于稀疏网。

普里姆算法操作:

设有连通网络 N = { V, E }:
1. 构造一个只有 n 个顶点,没有边的非连通图 T = { V, 空集 }, 每个顶点自成一个连通分量。
2.  在 E 中选最小权值的边,若该边的两个顶点落在不同的连通分量上,则加入 T 中;否则舍去,重新选择。
3.重复下去,直到所有顶点在同一连通分量上为止。

克鲁斯卡尔算法操作:

选择与刷新的过程:

1.初始化:计算从源点v0到T中各顶点vk的当前长度。
2.选择:在集合T中选取当前长度最短的一条最短路径(v0......vk),将vk加入到顶点集合S中。
3.更新:对T中其余各条路径进行调整:
若在图中存在弧(u,vk),且(v0,...,u)+(u,vk)<(v0,...,vk),则以路径(v0,...u,vk)代替(v0,...,vk)。
   反复进行第2第3步,直至求出源点到其余各顶点的最短路径长度。

四、近期回顾及接下来目标

1、选了图以后,很多知识可以迁移到之前所学内容,接下来需要在实操中不断回顾复习。

2、递归算法使用的不够灵活,需要再加强本层思考的能力。

3、老话题,保持手感,每日代码计划!

4、快步走多回头。

原文地址:https://www.cnblogs.com/gzq18/p/10891310.html

时间: 2024-10-12 08:06:39

Blog 5.第六章 图的认识的相关文章

第六章——图

本章学习了有关图的概念以及基本操作. 主要学习了邻接矩阵,邻接表,深度搜索以及广度搜索. 其中,邻接矩阵构造简单,方便操作,易于判断两个顶点间是否存在边,即通过A[i][j]=0/1.但是数据量大时,会浪费大量空间,且不利于增删顶点.而领接表方便增删顶点,只需修改指针即可,而且空间利用效率更高,解决了系数矩阵的问题,但是不方便判断两顶点间是否有边的存在. 有关图的术语: 1.生成树:极小连通子图,含有图中全部顶点,只有n-1条边. 2.极小生成树:权值最小的生成树. 有关邻接矩阵和邻接表的存储:

数据结构——第六章 图

图是由顶点集V和顶点间的关系集合E(边的集合)组成的一种数据结构.可以用二元组定义为:G=(V,E) 1. 有向图和无向图: 若用箭头表明了边是有方向性的,则称这样的图为有向图. 否则称为无向图. 2.完全图.稠密图.稀疏图 具有n个顶点,n(n-1)/2条边的图,被称为完全无向图,具有n个顶点,n(n-1)条弧的有向图, 称为完全有向图,完全无向图和完全有向图都称为完全图. 3.度,入度,出度 在图中,一个顶点依附的边或弧的数目,称为该顶点的度. 对有向图来说,进入或出去...的个数被称为入度

第六章&#160;图(b1)邻接矩阵

原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10258566.html

《数据结构》第六章 知识点结构导图

<数据结构>第六章 知识点结构导图

124第六章——在图形化界面下对磁盘进行常规管理 学习笔记

MBR:主引导扇区,在驱动器最前端的一段引导扇区,大小为512B(字节),由三部分组成,第一部分为主引导程序(boot loader),大小为446B,第二部分为分区表(partition table区),大小为64B,第三部分为magic number,大小为2B,固定为55AA.因为在分区表上记录一个主分区需要使用16B,所以整个硬盘的主分区和扩展分区最多只能是4个,不过在扩展分区上可以创建逻辑分区.Windows的系统文件必选安装在主分区上. 应用程序→系统工具→磁盘实用工具 124第六章

Linux与云计算——第二阶段Linux服务器架设 第六章:目录Directory服务器架设—FreeIPA

Linux与云计算--第二阶段Linux服务器架设 第六章:目录Directory服务器架设-FreeIPA 1 FreeIPA 配置FreeIPA服务器 Configure IPA Server to share users' account in your local network. [1] Install FreeIPA. [[email protected] ~]# yum -y install ipa-server ipa-server-dns bind bind-dyndb-lda

Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件

本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个

MiS603开发板 第十六章 图像之VGA接口测试

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第十六章 图像之VGA接口测试 第十六章图像之VGA接口测试 在本章开始介绍视频图像处理开发平台的硬件结构,主要包括

深入理解Magento – 第六章 – 高级Magento模型(转)

深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第六章 – 高级Magento模型 我们讲过Magento有两种模型,简单模型和EAV(Entity Attribute Value)模型.上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract / Varien_Object.简单模型和EAV模型的区别在于资源模型(Model Resource).虽然所有的资源模型都最终继承“Mage_Core_Model_Resro