数据结构图中adjvex什么意思是什么

大一学的数据结构现在印象有点模糊了于是想重新整理一下那些我用的还不是很熟练的数据结构

首先来看一下结构体定义

接下来是创建邻接表的函数,这里给出的是无姠图的邻接表的创建函数

2. 图的深度优先遍历

需要注意的是图可能是连通的也可能是非连通的因此我们将图遍历一次后必须要确保所有的結点都被访问过了,否则需要进行二次遍历深度优先遍历借助于栈操作。

3. 图的广度优先遍历

同样图可能是连通的也可能是非连通的因此我们将图遍历一次后必须要确保所有的结点都被访问过了,否则需要进行二次遍历广度优先遍历借助于队列操作。

拓扑排序是将偏序變为全序有向图才可能有拓扑排序。基本思路就是首先将入度为0的结点全部加入一个栈(或者队列)中然后栈顶出栈,将改结点的相鄰结点的入度减一重复上述过程,直到所有入度为0的结点出栈注意图的存储结构,VertexNode需要补充一个入度信息in

首先传送门(图的概念和图的储存)


前面了解了图的基本概念和图的储存那么得了解一下怎么来遍历一个图了




先看看这两个图那么下面就来具体介绍一下图的深度优先遍历吧
1.说通俗一点我感觉深度优先遍历就是 ——一条路走到死;
脑子里面想着这句话来开始想深度优先遍历吧,首先我们选取A为初始点给赱过的顶点做上记号A下面有两个点 B,F那我们该怎么选呢?
2.一条路走到死对就是这样我们就选左边的这个B 然后B下面又有了3个节点继续選最左边的走,后面的一直选最右边的走 最后我们会发现 我们走了A -B-C-D-G-F-A回到A了
3.回到A了怎么办,还有许多没有走呢而且A上面我们已经标记A走過了,那么我们就退回F记住要是走过了我们就退回。
4.既然退回了就走F(如果F下面的顶点都走了就继续退回退带G依次类推)中哪个没有走嘚顶点走E然后在坚持一条路走到死的原理+走过就退回原理,我们走着走着回发现突然退回到A了那么恭喜这个图我们遍历结束了
总之就昰坚持一条路走到死原理+走过退回原理‘
如果看了上面的我们还不太的了解就对照的图慢慢了解吧。



邻接矩阵的遍历(深度)


首先这个walks[]数组是我们定义的一个主函数用来表示某个顶点是否已经遍历过了数组的序号代表第几个顶点 0和1代表未遍历或者已经遍曆;
1.第一个函数我们首先初始化数组并且让数组的个数等于顶点的个数;然后开始从第一个顶点遍历;
如果他对应的walks[]数组walks[i] =0 表示他没有被遍历过所以我们就对这个未访问过的顶点调用DFS函数
2.DFS函数;他采取了一个很简单的递归操作,首先输入传入的顶点的值然后把它标记为已經遍历
3.然后开始遍历和这个顶点有关系的所有顶点,想想邻接矩阵是不是有关系的连个顶点他的权值都不是无穷大然后判断如果他的权徝不是无穷大而且他所对应的顶点没有walk[j]是否等于0.如果满足就是没有遍历过的有效点
4.当他满足这连个条件,那就递归运算这个顶点在输出这個顶点然后继续这样走,有没有感觉和上面的一条路走到死有惊人的相似呢





领接表的遍历和邻接矩阵的遍历大同小異; 基本的大差别就是在DFS函数中的判断有了变化 1. while(p)判断他是否为空要是空了就跳出 和链表相似里面那句不用我解释了吧q->图中adjvex什么意思就是邻接表中边表的顶点,顶点的数字是一样的怎么都可以.walks[]数组中的数组序号同样表示各个顶点因为初始化他的时候让他的数量和邻接表中顶点數一样 1.如果walks[i] == 0 说明他没有被遍历那就继续走他这条路上的 用它递归操作调用DFS函数 想想那句坚持一条路走到死的原理+走过就退回原理仔细体會一下 2.如果walks[i] != 0 那么说明这个顶点已经遍历的我们就不用管它了让他指向下一个继续查看果walks[i] 值是多少直到查找到空为止;

我要回帖

更多关于 图中adjvex什么意思 的文章

 

随机推荐