首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ 不知系列之基于邻接矩阵实现广度、深度搜索

适合描述更复杂的多对多数据结构,如群体社交关系、城市交通路线…… 本文将讨论以邻接矩阵方式存储,并在此基础之上对进行深度、广度搜索。 2....如上的结构可以描述如下: # 5 个顶点 V={A0,B1,C2,D3,E4} # 7 条边 E={ (A0,B1,3),(B1,C2,4),(C2,D3,6),(C2,E4,1),(D3,E4,2)...的存储 ---- 的存储实现主流有 2 种:邻接矩阵和链接表,本文主要介绍邻接矩阵。 3.1 邻接矩阵实现思路 ---- 使用一维数组存储顶点的信息。 使用二维矩阵(数组)存储顶点之间的关系。...邻接矩阵适合表示关系复杂的结构,如互联网上网页之间的链接、社交圈中人与人之间的社会关系…… 3.2 编码实现邻接矩阵 ---- 3.2.1 基本函数 ---- 因顶点本身有数据含义,需要先定义顶点类型...编码实现广度优先搜索: 广度优先搜索需要借助队列临时存储选节点,本文使用STL中的队列,在文件头要添加下面的包含头文件: #include #include 在类中实现提供广度优先搜索算法的函数

1.1K20

直播短视频源码,邻接矩阵实现的相关代码

c1,c2;     cin>>type;     if(type==DG)     {         G.type=DG;     }     else if(type==UDG)     {         ...>>c2;     v1=Locate(c1,G);     v2=Locate(c2,G);     if(G.type==DG)     {         G.arc[v1][v2]=1;     ...:有向"<<endl;     else if(G.type==UDG)cout<<"的类型:无向"<<endl;     else if(G.type==DN)cout<<"的类型:有向网"<...]<<" ";     cout<<endl;     cout<<"邻接矩阵:"<<endl;     bool flag=true;         for(int i=1;i<=G.vertexnum...<endl;     DFStraverse(G);     cout<<"广度遍历:"<<endl;     BFStraverse(G);     return 0; } 以上就是直播短视频源码,邻接矩阵实现的相关代码

49331
您找到你想要的搜索结果了吗?
是的
没有找到

邻接矩阵存储结构

邻接矩阵存储结构 一、知识框架 二、存储方式(这里只讨论邻接矩阵存储方式) 在邻接矩阵存储结构中,顶点信息使用一维数组存储,边信息的邻接矩阵使用二维数组存储。...无向和其对应的邻接矩阵 有向 三、代码实现 1.头文件AdjMGraph.h 针对的是下面这个有向 #pragma once //邻接矩阵存储结构 #include "SeqList.h...,就是邻接矩阵的顶点v行中 从第一个矩阵元素开始的非0且非无穷大的顶点 */ int GetFirstVex(AdjMGraph G, int v) //在G中寻找序号为v的顶点的第一个邻接顶点 //...include "AdjMGraph.h" #include "AdjMGraphCreate.h" int main() { AdjMGraph g1; DataType a[] = { 'A','B','C'...DeleteEdge(&g1, 0, 4);//删除边 printf("顶点集合为:"); for (i = 0; i < g1.Vertices.size; i++) { printf("%c

55170

的遍历(上)——邻接矩阵表示

概述 作为数据结构书中较为复杂的数据结构,对于的存储方式分邻接矩阵和邻接表两种方式。在这篇博客中,主要讲述邻接矩阵下的的深度优先遍历(DFS)与广度优先遍历(BFS)。...---- 广度优先遍历(BFS) BFS 算法的思想是:对一个无向连通,在访问图中某一起始顶点 v 后,由 v 出发,依次访问 v 的所有未访问过的邻接顶点 w1, w2, w3, …wt;然后再顺序访问...i++; } } } ---- 深度优先遍历(DFS)——递归版本 递归算法: 1)访问起点v0 2)依次以v0的未访问的连接点为起点,DFS搜索,...3)若该图为非连通,则图中一定还存在未被访问的顶点,选取该顶点为起点,重复上述DFS过程,直至图中全部顶点均被访问过为止。...#include using namespace std; class Graph{ private: int** G; //邻接矩阵

90520

数据结构 邻接矩阵

邻接矩阵的存储方式是用两个数组来实现的,一个一维数组存储顶点信息,一个二维数组存储线(无向)或弧(有向)的信息。...设G有n个顶点,则邻接矩阵是一个n × n的方阵,定义为: 无向邻接矩阵,两个顶点有边则为1,否则,为0;因为是无向arc[i][j] = arc[j][i],所以矩阵为对称矩阵,对角线为自己到自己的边...设G有是网,有n个顶点,则邻接矩阵是一个n × n的方阵,定义为: 无向网和无向差不多,就是加了权值,两个顶点之间无边的话距离是∞。 如果是有向邻接矩阵就不是对称矩阵了。...; //的当前顶点数 int arcnum; //的当前边数 }MGraph; 存储结构里面主要由四部分构成, 第一部分是一个一维数组存储的是顶点信息, 第二部分是邻接矩阵由二维数组组成,...下面是具体的代码实现(注释的很详细了): #include using namespace std; #define MAXVERTEX 100 //的最大顶点数 #define

59110

【数据结构】邻接矩阵存储及度计算

题目描述 假设邻接矩阵存储。...输入的顶点信息和边信息,完成邻接矩阵的设置,并计算各顶点的入度、出度和度,并输出图中的孤立点(度为0的顶点) --程序要求-- 若使用C++只能include一个头文件iostream;若使用C语言只能...include一个头文件stdio 程序中若include多过一个头文件,不看代码,作0分处理 不允许使用第三方对象或函数实现本题的要求 输入 测试次数T,每组测试数据格式如下: 类型  顶点数 (D...—有向,U—无向) 顶点信息 边数 每行一条边(顶点1 顶点2)或弧(弧尾 弧头)信息 输出 每组测试数据输出如下信息(具体输出格式见样例): 邻接矩阵 按顶点信息输出各顶点的度(无向)或各顶点的出度...outdegree[GetIndex(tail)]++;             indegree[GetIndex(head)]++; 然后如果是无向的话,需要对称建立邻接矩阵

17030

函数调用堆栈-c语言

我们就使用一个简单的c语言程序来对描述一下在函数调用的时候都发生了什么。 ?...中间的一小段没有意义的汇编语言是为了方便设置断点,为后面的调试做好铺垫,因为有时会碰到找不到断点位置的情况,使用这个方法,可以在找不到断点的时候向后执行一次,而不破坏我们想调试的程序当前的堆栈状态,这里对...我们先假设初始状态下的堆栈如下,esp与ebp的真实距离我们省略。 ? 接下来我们来看一下后面的操作。 ?...然后让esp减去了0c0h位,开始提升堆栈了,为程序的运行开辟一个存储空间,这个区域也就是平时所说的缓冲区,因为一个单元是四个字节,c0也就是往上提了48个格,由于位置有限中间依旧省略,此时堆栈就变成了如下的样子...接下来让esp增加0c0,也就恢复到了提升堆栈之前的位置,此时esp与ebp到了一个位置。 ?

2.7K10

C语言结构总结(一)

这里主要介绍: 的各种定义 的顶点与边之间的关系 的存储结构(邻接矩阵、邻接列表等) 的遍历方法(深度优先、广度优先) 最小生成树算法(Prim 算法、Kruskal 算法) # 的各种定义...n\cdot logn稀疏和稠密:边或弧数以 为分界。 网:即带权的。...# 的存储结构 ---- 下面使用 C语言 来描述数据结构 先把最小单位定义一下: typedef char[4] Vertex;// 顶点信息 typedef int Weight;// 权重...typedef int Number;// 数值类 # 邻接矩阵 邻接矩阵 typedef Weight** Matrix;// 矩阵 typedef struct GMatrix {// 邻接矩阵存储结构...重复 2、3,直到遍历完所有的边,此时已形成最小生成树 Example: 参考: C 语言数据结构与算法视频教程全集 VisuAlgo - 图形据结构(邻接矩阵,邻接列表,边缘列表)

1.8K20

C语言链表实现

我学数据结构的时候也是感觉很困难,当我学完后我发现了之所以困难时因为我没有系统的进行学习,而且很多教授都只是注重数据结构思想,而忽略了代码方面,为此我写了这些博文给那些试图自学数据结构的朋友,希望你们少走弯路 我尝试用最简单的语言与代码来描述链表...,事实上它本身也很简单 静态单链表实现 下面一部分的讨论都将围绕上面这幅图片展开,既然是逐步实现,我不考虑在开头就让这个单链表完美实现,它将只有两个部分:链表的创建&遍历链表输出 首先我们要知道一些简单的概念...然后让第一个节点的next指向新节点,这就完成了插入//删除之前插入的节点 ins_node=f->next;//让第一个节点next指向新插入的节点,这里你可能会感到疑惑,我建议你画图或者再看看上面的就能理解...这个疑问你可以自己解答比较好 动态单链表实现 到这里一个简单的链表就已经实现了,但是我们还需要继续改进,因为我们有时候不知道每个节点储存的数据,所以我们就需要一个动态链表了,下面这个将实现把用户输入的数据以链式结构储存...c; b->pre=a; c->data=6; c->next=NULL; c->pre=b; //输出 /*node *print_head=head; while(print_head

5.4K30

PTA 邻接矩阵存储的深度优先遍历

6-1 邻接矩阵存储的深度优先遍历(20 分) 试实现邻接矩阵存储的深度优先遍历。...函数接口定义: void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); 其中MGraph是邻接矩阵存储的,定义如下: typedef struct...*/ }; typedef PtrToGNode MGraph; /* 以邻接矩阵存储的类型 */ 函数DFS应从第V个顶点出发递归地深度优先遍历Graph,遍历时用裁判定义的函数Visit访问每个顶点...*/ }; typedef PtrToGNode MGraph; /* 以邻接矩阵存储的类型 */ bool Visited[MaxVertexNum]; /* 顶点的访问标记 */ MGraph...CreateGraph(); /* 创建并且将Visited初始化为false;裁判实现,细节不表 */ void Visit( Vertex V ) { printf(" %d", V)

1.5K60

数据结构与算法 -- 邻接矩阵)原理详解

PS:在数据结构中有着非常大的分量,它比树有着更为复杂的形式结构,这里就不再说的基本概念,直接就说的存储结构,邻接矩阵和邻接表。是有方向的,有方向的叫做弧,无方向的叫做边。...在大多行业中的使用也是很多的,比如说游戏中两个人物的寻址,自动寻路,就是直接经过计算然后移动。后序还会介绍Dijkstra(迪杰斯特拉)算法计算最短路径问题。 下面介绍邻接矩阵原理: ?...当然这是邻接矩阵。...){ c=1; } // printf("c的值是%d",c); g->arc[ii][jj] = c; g->arc...[jj][ii] = c; // 无向 } printfL(g); }  3:打印表 void printfL(MGraphy *g) { //输出的信息

1.1K30
领券