首页
学习
活动
专区
工具
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.2K20

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

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; } 以上就是直播短视频源码,邻接矩阵实现图的相关代码

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

    图的邻接矩阵存储结构

    图的邻接矩阵存储结构 一、知识框架 二、存储方式(这里只讨论邻接矩阵存储方式) 在图的邻接矩阵存储结构中,顶点信息使用一维数组存储,边信息的邻接矩阵使用二维数组存储。...无向图和其对应的邻接矩阵 有向图 三、代码实现 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

    61670

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

    概述 图作为数据结构书中较为复杂的数据结构,对于图的存储方式分邻接矩阵和邻接表两种方式。在这篇博客中,主要讲述邻接矩阵下的图的深度优先遍历(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; //邻接矩阵

    96520

    数据结构 图的邻接矩阵

    图的邻接矩阵的存储方式是用两个数组来实现的,一个一维数组存储顶点信息,一个二维数组存储线(无向图)或弧(有向图)的信息。...设图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

    65510

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

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

    30530

    函数调用堆栈图-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 - 图形据结构(邻接矩阵,邻接列表,边缘列表)

    2K20

    igraph软件包创建图和网络(创建邻接矩阵)

    一、igraph软件包创建图和网络 igraph 是一个独立的库,底层是 C,上层有 Python 和 R 接口,主要做图和网络方面的计算,附带绘图功能。...二、例题 eg1.有weight的图 require(igraph) d = data.frame(p1 = c('a', 'b', 'c'), p2 = c('b', 'c', 'a'), weight...ramp(seq(0, 1, length = length(unique(label)))), max = 255)#设定颜色 用户可以根据color、rgb值和hsv值来设定不同的颜色 注释:R语言设定颜色的方法...邻接矩阵的图 library(igraph) cellsc(0,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,3,0,3,3,3,0,0,0,0,0,0,0,0,3,0,3,1,1,1,0,0,0,0,0,0,1,1...Alice-Bob-Cecil-Alice,Daniel-Cecil-Engene,Cecil-Gordon) > plot(g) (3) graph.data.frame() #从数据框画图 graph.adjacency() #从邻接矩阵创建图

    1.8K30

    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.6K60

    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

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

    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
    领券