广度优先遍历

20182316胡泊 第10周学习总结

流过昼夜 提交于 2019-12-05 20:31:21
20182316胡泊 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结 教材学习内容总结 第十九章 图 什么是图 1.图的概念 概念:我理解的图就是由内容和相互关系组成的非线性的存储数据的形式,具体来说就是由结点来存储元素,连线代表关系。 树中的每个结点都只有一个父结点,如果我们允许一个结点连通多个其他结点,树就变成了图。 术语: 顶点(Vertex):图中的数据元素。 边(Edge):图中各个顶点之间的连接。 邻接/邻居:两个顶点之间有一条边,则称这两个顶点是邻接的。 路径:连接两个顶点之间的一系列边称为两个顶点间的路径,边的条数称为路径长度(路径长度=顶点数-1)。 环路:首顶点与末顶点相同且路径中没有边重复的路径。 分类: 【是否有方向】无向图和有向图 【每条边带有权重或代价】加权图/网络(加权图可以是有向的也可以是无向的) 1.无向图 无向图 :是一种边为无序结点对的图。在无向图中,(A,B)(B,A)指的是一条边,表示A与B之间有一条两个方向都连通的边。 完全 :一个无向图是完全的,说明对于有n个顶点的无向图,图中有n(n-1)/2条边。 连通 :如果无向图中的任何两个顶点之间都存在一条路径,则认为该无向图是连通的。 同时连通还分为强连通和弱连通(非强连通),强连通图中,任何两个顶点之间都是连通的,就是说任何两个顶点之间都至少有一条路径。

20182322 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结

天涯浪子 提交于 2019-12-05 20:30:57
教材学习内容总结 树的定义是,除根结点之外,树的每个结点都恰好有一个父结点。 而如果违背了这一个前提,即允许树的每个结点连通多个其它结点,不再有父亲、孩子之说,即得到孩子的概念 一、无向图 图与树类似,也由结点和这些结点之间的连接构成(这些结点就是图的顶点,而结点之间的连接就是图的边) 无向图是一种边为无序结点对的图 如果图中的两个顶点之间有一条连通边,则称这两个顶点是邻接的(也互称邻居) 连通一个顶点及其自身的边称为自循环或环 如果无向图拥有最大数目的连通顶点的边,则认为这个无向图是完全的 对有n个顶点的无向图,要使该图为完全的,要求有n(n-1)/2条边(这里假设其中没有边是自循环的) 路径是图中的一系列边,每条边连通两个顶点(无向图中的路径是双向的) 如果无向图中的任意两个顶点之间都存在一条路径,则认为这个无向图是连通的 环路是一种首顶点和末顶点相同且没有重边的路径 没有环路的图称为无环的 无向树是一种连通的无环无向图,其中一个元素被指定为树根 二、有向图 有向图(双向图),它是一种边为有序顶点对的图 有向图的路径是图中连通两个顶点的有向边序列(有向图中的路径不是双向的) 如果有向图中没有环路,且有一条从A到B的边,则可以把顶点A安排在顶点B之前。这种排列得到的顶点次序称为拓扑序 三、网络(加权图) 网络:一种每条边都带有权重的或代价的图 根据需要,网络可以是无向的

20182333 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

别说谁变了你拦得住时间么 提交于 2019-12-05 20:15:53
20182333 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结 教材学习内容总结 图 与树类似,图由结点和这些结点之间的连接构成。 顶点(vertice):就是结点。 边(edge):就是这些结点连接起来的线段。 路径(path):图中的一系列边,每条边连通两个顶点。 路径的长度(length):是该路径中边的条数(或者是顶点数减去1)。 环路(cycle):一种首结点和末结点相同且没有重边的路径。没有环路的图称为无环的(acyclic)。 完全图(complete graph):含有最多条边的无向图 无向图 边没有方向的图称为无向图。 无向图中,表示边的顶点对是无序的,例如,标记顶点A,B,C,D,一条边可以表示为(A,B)。无向图表示顶点对是无序的,所以边(A,B)意味着A和B之间的连接是双向的,在一个无向图中,(A,B)和(B,A)所代表的边的含义完全一样。 含有最多条边的无向图称为完全图:Edges=(n-1)*n/2. 如果无向图中任意两个顶点间都有路径,则无向图称为连通的。 路径是连接图中两个顶点的边的序列,路径长度为路径所含边的数目(顶点个数减一) 第一个顶点和最后一个顶点是同一个顶点且没有重复边的路径,称为一个环。 如果图中两个顶点之间有边连接,则称这两个顶点是邻接的(邻居),自己连接到自己的边称为自循环或悬挂。 有向图

20182310第十周学习总结

旧巷老猫 提交于 2019-12-05 17:36:54
20182310 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结 教材学习内容总结 本周主要学习无向图、有向图、带权图、常用的图算法、图的实现策略。 1.与树类似,图由结点和这些结点之间的连接构成。 顶点(vertice)就是这些结点。 边(edge)就是这些结点连接起来的线段。 路径(path):图中的一系列边,每条边连通两个顶点。 路径的长度(length):是该路径中边的条数(或者是顶点数减去1)。 环路(cycle):一种首结点和末结点相同且没有重边的路径。没有环路的图称为无环的(acyclic)。 完全图(complete graph):含有最多条边的无向图 对有n个结点的无向图,要使该图是完全的,要求有n(n-1)/ 2个边。 对有n个结点的有向图,要使该图是完全的,要求有n(n-1)个边。 2.无向图是一种边为无序结点对的图。 无序结点(undirected vertice):A、B、C、D 边(edge)(注:由于无序,所以<a,b>和<b,a>一样):(A,B) (B,D) (A,D) (B,C) (C,D) 邻接(adjacent):如果图中两个顶点之间有一条连通边,则称这两个顶点是邻接的。如图,A和B邻接,A和C不邻接。 自循环(self-loop)或环(sling):连通一个顶点及其自身的边称为自循环,如图,边(A,A

广度优先遍历无向图

匿名 (未验证) 提交于 2019-12-03 00:22:01
#include<stdio.h> #include<stdlib.h> #define MAX_VERTEX_NUM 20 #define MAXQSIZE 100 #define OK 1 typedef char VertexType; typedef char QElemType; typedef int InfoType; typedef struct ArcNode { }ArcNode; typedef struct VNode { }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct{ 文章来源: 广度优先遍历无向图

图的广度优先遍历(邻接表)

匿名 (未验证) 提交于 2019-12-02 23:03:14
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<queue> using namespace std; #define MAX 100 typedef struct EdgeNode// 边表结点 { int adjves;//存储顶点的下标 struct EdgeNode* next;//连接下一个邻点 }EdgeNode; typedef struct VertexNode//顶点表结点 { int ves;//顶点的值 EdgeNode* firstedge;//相连的顶点的值 }VertexNode,AdjList[MAX]; //邻接表 typedef struct { AdjList adjlist; int ves;//顶点 int edge;//边 int book[MAX];//判断是否有被访问过 }MGraph; void createMGraph(MGraph *G) { int i; int start; int end; EdgeNode *e; printf("please input the ves and edge:\n"); scanf("%d%d",&(G->ves),&(G->edge)); //初始化 printf("please input the ves:

图论☞广度优先遍历

喜夏-厌秋 提交于 2019-12-01 19:22:16
对于图这种数据结构,一般有两种遍历即深度优先(dfs),和广度优先(bfs),假设我们有如下这张图: 访问过程 现在假设计算0到其它点的路径,根据 广度优先遍历 ,广度优先遍历需要借助于队列这种数据结构,思路分析: 注意:访问某一个顶点时,要进行标记是否被访问过以及其巧妙利用数组的索引跟顶点 计算路径 那如何找到顶点到某一点的路径?其实思路跟深度优先遍历中查找路径方法是一样的,但是在记录访问的数组中保存的数据却是不一样的(代码实现中 from 数组),这就跟我们的遍历方式有关,深度优先遍历采用递归,广度优先遍历是借助于队列这种数据结构。 上述步骤我们可以这样记录(初始化数组的值为-1):arr[6]=0,arr[0]=-1,因此路径是0->6。同时我们也可以发现一个问题,这次我们一下就找到路径。以下是深度优先遍历(path)和广度优先遍历(path2) from 数组内部的数据 代码实现 public class ShortestPath { /**图的引用*/ private Graph G; /**起始点*/ private int s; /**记录bfs的过程中节点是否被访问*/ private boolean[] visited; /**记录路径, from[i]表示查找的路径上i的上一个节点*/ private int[] from; /**构造函数, 寻路算法,

图的深度优先和广度优先遍历

感情迁移 提交于 2019-12-01 16:54:12
深度优先遍历   首先我们说一下邻接点的定义,对于无向图,如果两个顶点之间相互连接,那么它们互称为邻接点。   深度优先遍历支持从指定的结点开始遍历。深度优先遍历,也称作深度优先搜索,缩写为DFS。深度优先遍历从某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点触发深度优先遍历图,直至所有和v有路径想通的顶点都被访问到。   上面这段话听起来有点官方还有点笼统,不太好理解,所以我们通俗一点来说明这个问题。   所谓深度优先遍历就是从某个指定的结点开始,先访问它,然后遍历存储顶点的数组,如果碰到它的邻接点,并且这个邻接点没有被访问过,那么就递归调用这个函数来访问它,然后递归函数又会在访问完它之后,去递归访问它的邻接点......等到递归函数第一次出栈之后又会去访问上一个访问的结点的下一个邻接点......一直这样层层递归出栈,就可以访问到所有的结点,这样就达到了深度优先的遍历结果。 看看代码   在实现深度优先遍历之前,我们得先实现一个内部私有的功能函数bool getValueFromMatrix(int row, int col, int& val),这个函数的作用是得到邻接矩阵中row行col列的值,将其存放在val里 //对这个矩阵的读操作,读取某一个值,将值存放在val中 bool getValueFromMatrix(int row, int col, int&

【知识强化】第五章 图 5.3 图的遍历

£可爱£侵袭症+ 提交于 2019-11-28 12:51:05
上一节课我们介绍了有关图的基本操作,那么除了上节课我们介绍的那些相关基本操作之外,还有一种非常重要的操作就是有关图的遍历。那么图的遍历分为两种,有广度优先搜索,也就是广度优先遍历。还有深度优先搜索。本节课我们就来学习图的广度优先搜索。 来源: https://www.cnblogs.com/ZHONGZHENHUA/p/11407786.html

20182310第十周学习总结

这一生的挚爱 提交于 2019-11-27 12:12:20
20182310 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结 教材学习内容总结 本周主要学习无向图、有向图、带权图、常用的图算法、图的实现策略。 1.与树类似,图由结点和这些结点之间的连接构成。 顶点(vertice)就是这些结点。 边(edge)就是这些结点连接起来的线段。 路径(path):图中的一系列边,每条边连通两个顶点。 路径的长度(length):是该路径中边的条数(或者是顶点数减去1)。 环路(cycle):一种首结点和末结点相同且没有重边的路径。没有环路的图称为无环的(acyclic)。 完全图(complete graph):含有最多条边的无向图 对有n个结点的无向图,要使该图是完全的,要求有n(n-1)/ 2个边。 对有n个结点的有向图,要使该图是完全的,要求有n(n-1)个边。 2.无向图是一种边为无序结点对的图。 无序结点(undirected vertice):A、B、C、D 边(edge)(注:由于无序,所以<a,b>和<b,a>一样):(A,B) (B,D) (A,D) (B,C) (C,D) 邻接(adjacent):如果图中两个顶点之间有一条连通边,则称这两个顶点是邻接的。如图,A和B邻接,A和C不邻接。 自循环(self-loop)或环(sling):连通一个顶点及其自身的边称为自循环,如图,边(A,A