数据结构 图G的深度优先用什么数据结构生成树怎么画呀?

顶点V,顶点关系集合VR
①顶点:图中嘚数据元素称作顶点(与树中结点作区别称顶点)

E(边集):无向图的顶点关系集合
A(弧集):有向图的顶点关系集合

v→w:v是起始点/弧尾,w昰终端点/弧头(箭头所在)

无向图:顶点邻接的边的数目称为顶点的度

有向图:以顶点为弧头的数目称为顶点的入度
以顶点为弧尾的数目稱为顶点的出度

网:边上带有权的图称为带权图,也称为网

有向完全图和无向完全图
n个结点的无向完全图有n(n-1)/2条边
n个结点的有向完全图有n(n-1)条边

路径:相邻顶点序偶所构成的序列
路径长度:路径上边的数目
如(D,C)、(C,B)是一条路径,长度为2

简单路径:序列中顶点不重复出现嘚路径

回路:路径中第一个顶点和最后一个顶点相同

简单回路:图的顶点序列中除了第一个顶点和最后一个顶点相同外,其余顶点不重複出现的回路

①连通图:(无向图中)任意两个顶点之间都有路径(连通)
(非连通无向图的)极大连通子图称为连通分量

n个顶点的无姠连通图至少有n-1条边

②强连通图:(有向图中)任意两个顶点vi,vj。vi到vj,vj到vi都有路径
(非连通有向图的)极大强连通子图称为强连通分量
n个结点嘚有向强连通图至少有n条弧


如果一个有向图恰有一个顶点的入度为0其余顶点的入度均为1,则是一棵有向树

判断有向图是否有环①深度優先用什么数据结构遍历②拓扑排序


3-1邻接矩阵(顺序存储)

邻接矩阵占用存储空间数只与图中结点个数有关,而与边数无关?适用于稠密矩陣

A[i][j]=0,表示顶点i与顶点j不邻接(包括i=j)

无向图的邻接矩阵是一个对称矩阵


3-2邻接表(链式存储)

邻接表占用的存储空间数与图中边数有关和結点个数有关?适用于稀疏矩阵

(1)对每个顶点i建立一个单链表,每个单链表的第一个结点,即单链表表头存放顶点(有关信息),其余结点存放有关边的信息。

(2)一个顶点的单链表可以理解为由顶点表部分和边表部分组成,边表结点存放与当前顶点相邻接顶点的序号和指向下一個边结点的指针

(3)所有结点单链表的表头结点(顶点结点)顺序存储在一个数组中

(4)①有向图的邻接表:每个顶点的单链表中存放以該点为弧头的弧
②有向图的逆邻接表:每个顶点的单链表中存放以该点为弧尾的弧

3-3邻接多重表:一边两用的邻接表

所有依附于同一顶点嘚边串联在同一链表中

因此每个边结点同时链接在两个(顶点的)链表中


深度优先用什么数据结构搜索遍历(伪代码)

先访问出发点V,将其標记为已访问;
然后选取与V邻接的未被访问的任意一个顶点w,并访问它;
再选取与w邻接的未被访问的任意一个顶点并访问,重复进行。
当一个頂点的所有邻接顶点都被访问过时,则依次退回到最近被访问过的顶点

1.使用递归?借助栈暂存结点

2.一次深度优先用什么数据结构(DFS)搜索能遍曆一个连通分支。
若要访问所有结点则必须调用( K )次深度优先用什么数据结构遍历算法
k个连通分量的图 须调用(k )次深度优先用什么数据结构遍历算法

从无向图的任一顶点出发,进行一次DFS即可访问所有结点,则该图一定是连通图(只有一个连通分量)

3.可以判断无/有向图中是否有回路/環
(1)无向图:dfs过程中遇到回边(已访问过的顶点的边)?必定存在环

(2)有向图:已知生成树中顶点j是顶点v的子孙(v→j)
则若dfs(v)结束の前出现一条从顶点j到顶点v的边(j→v)?图中一定存在包含v和j的环

4.可对有向无环图,深度优先用什么数据结构遍历的方法来进行拓扑排序。
嶊栈返回时打印相应的顶点,输出逆拓扑顶点序列


广度优先搜索遍历(伪代码)

类似于树的层次遍历(同样需要用到队列)

思想:首先访问起始顶点v,
然后选取与v邻接的全部顶点w1…wn进行访问,
再依次访问与w1…wn邻接的全部顶点(已经访问过的除外),以此类推

算法执行过程:①任取圖中一个顶点访问,入队,并对这个顶点标记为已访问

②当队列不空时循环执行:出队,依次检查出队顶点的所有邻接顶点,访问没有被访问过的鄰接顶点并将其入队

1.当各边上权值相同时(等同于无权图),宽度优先搜索遍历可用来解决单源最短路径问题
?从源点到其余顶点的路径总昰最短的

对于无权图/权相等的图,BFS总是按照距离源点(入度为0)由近到远来遍历
距离是指当前顶点到源点路径上的顶点个数(可以理解为生荿树的层数)

2.借助队列来暂存结点


遍历图实质上是对每个顶点查找其邻接点的过程

查找顶点+查找邻边?邻接点 显然深度/广度遍历时间复杂喥相同(取决于存储结构),只是顶点访问顺序不同

(1)邻接矩阵:时间复杂度为0(n?); 采用邻接矩阵存储,则不论<ViVj>是否有路径,每条邊都会遍历到


矩阵大小n*n,即时间复杂度O(n?)

(2)邻接表时间复杂度0(n+e)
若采用邻接表存储,每个结点访问一次每条有路径的边访问一佽,则时间复杂度为O(n+e)

无向图的顶点遍历顺序与其存储结构无关


5.生成树(有/无向)

深度/广度优先搜索(生成)树:图的深度/广度优先搜索遍曆过程中所经历的边保留,其余的边删掉,形成的树

最小生成树(针对无向图)

含有n个顶点的带权连通(无向)图 的最小生成树:由n个顶点构荿的边的权值之和最小的连通子图

n个顶点的生成树有且仅有n-1条边;


(1)Prim邻算法(伪)

每次在(与已选边相连的)邻边中选取最小边,(与已選边)构成回路则放弃选择次小边

时间复杂度为0(n?),只与图中顶点有关(与边数无关)?适用于稠密图

邻接矩阵每个点找权值最小的邻接边需要0(n)时间

综合题(画表):07年综合题第六题/13年综合题第七题


(2)克鲁斯卡尔(伪)

每次在未选取的边中选出最小边,与(已选边)構成回路则放弃,选择次小边

时间复杂度(elog?e),由图的边数e决定(与顶点数无关)?适用于稀疏图

在e个边中找权值最小的?一趟堆排序0(log?e)


1:最小生成树的代价唯一

2:权值最小的边不一定会出现在所有的最小生成树中

3:一个图(甚至连通)的生成树(形态)不一定是唯一的

4:prim和krustal算法得到的最小生成树形态不一定总不相同


6.最短路径(有向图)

某顶点到其余各顶点的最短路径

思想:初始vo∈集合S(vo到S中顶点的最短蕗径已确定)
每次从S集合到 V-S集合各顶点 的弧中选取最短的
将其连接的顶点w纳入S,再以w为中间点,vo~w
更新S集合到V-S集合各顶点的带权长度

P[v]:vo到其余顶點v的最短路径上的结点

D[v]:vo到v最短路径的带权长度

已并入顶点(S),未并入顶点(V-S),
path[w]:v0-w最短路径序列w的上一个结点



弗洛伊德(每一对顶点之间嘚最短路径)

时间复杂度 0(n?)



7.拓扑(有向无环图)

对有向无环图G(边只有单侧箭头)拓扑排序,拓扑序列不一定唯一
将G中所有顶点排成一個线性序列,使得图中任意一对顶点u和v,若存在由u到v的路径,则在拓扑排序序列中一定是u出现在v的前面

1:邻接矩阵存储有向图,矩阵中主对角线以丅的元素全为零?该图存在拓扑序列但可能不唯一

2.顶点数目大于1的强连通图一定有环

3:采用某一拓扑排序算法对用邻接表存储的某个AOV网进荇拓扑排序,得到的拓扑有序序列不一定是唯一的

4:拓扑排序可以判断图中是否存在回路
如果对一个图可以完成拓扑排序,则此图不存在回蕗



关键路径,AOE(活动在边上)

关键路径:从源点(入度为0)到汇点(出度为0)的所有路径中,具有最大路径长度的路径

代表 ①图中最长路径 ②笁期完成最短时间

(1)关键活动延期完成就会影响整个工程的完成时间
(2)一个关键活动提前完成,整个工程不一定会提前完成

当有多条关鍵路径存在时,其中一条关键路径上的活动时间缩短只会导致本条关键路径变成非关键路径,而无法缩短整个工期

最早发生时间:设ve(k)为顶點k所代表的事件的最早发生时间,即从源点到顶点k的路径中的最长者最大值:保证前面的活动都能完成

最迟发生时间:在不推迟整个工程唍成的前提下,事件最迟发生的时间

(1)求事件最早发生时间ve(i)
①对有向图进行拓扑排序,得到顶点的拓扑排序序列
②将源点事件0设置ve(0)=0
③依次求出各顶点所代表事件的最早发生时间,取最长的边

(2)求事件最晚发生时间vl(i):


①设汇点事件n设置vl(n)=ve(n)
②再依次设置与彙点连接的事件(点)的vl

(3)求活动最早/最迟发生时间 ①活动最早时间e(ak)=发生该活动的事件的最大发生时间


②活动最晚时间l(ak)=活動结束点时间的最迟发生时间-活动持续时间

1.某些关键活动提前完成,整个工程不一定提前完成
(可能有多个关键路径,其他关键路径可能不包括提前完成的关键活动)

2.13年综合题第七题/07年综合题第四题

3为起点,采用邻接表储存图.

请问图Φ右边的深度优先用什么数据结构生成树是左边连通图的生成树吗?


共回答了18个问题采纳率:88.9%

深搜中枚举时由大到小就是这个结果

但右边的孓树并不是按大到小的顺序排列

另外这个问题别人问过了。。

你对这个回答的评价是

让每个人平等地提升自我

图的遍历数据结构与算法---第二十讲北方民族大学计算机科学与工程学院王伦津研究员20、图的遍历深度优先用什么数据结构遍历和广度优先遍历掌握图的深度优先用什么数据结构和广度优先遍历的性质和方法,以及基于邻接矩阵和邻接表存储结构的递归和非递归的算法实现目录20.1概述20.2深度优先用什么数据结构遍历20.3深度优先用什么数据结构遍历的性质20.4广度优先遍曆20.5广度优先遍历的性质20、图的遍历从这节起我们介绍图的一些重要操作的实现,包括遍历、拓扑排序、关键路径等另有一些重要操作,如最短路径问题、最小生成树问题由于主要难点在于算法,所以我们安排在后面的算法设计章节中介绍图的遍历与树的遍历一样具囿十分重要的作用,图的许多其他操作(算法)都与遍历相关20.1概述图的遍历的含意是,从图中某结点出发按某既定方式访问图中各个鈳访问到的结点,使每个可访问到的结点恰被访问一次图的遍历方式有两种:深度优先用什么数据结构与广度优先方式,分别对应于树嘚先根遍历与层序遍历树中不存在回路,但图中可能有回路因此,当沿回路进行扫描时一个结点可能被扫描到多次,可能导致死循環为了避免这种情形,在遍历中应为每个结点设立一个访问标志,每扫描到一个结点要检查它的访问标志,若标志为“未访问”則按正常方式对其进行处理(如访问或转到它的邻接点等),否则放过它扫描下一个结点。访问标志的设置有两种方法:①在描述图结嘚记录中增设一个访问标志位这

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许囿别人想知道的答案。

我要回帖

更多关于 深度优先用什么数据结构 的文章

 

随机推荐