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

算法-LeetCode 133、207(拓扑排序,邻接建立

给定无向连通图中一个节点引用,返回该深拷贝(克隆)。...无向是一个简单,这意味着图中没有重复边,也没有自环。 由于是无向,如果节点 p 是节点 q 邻居,那么节点 q 也必须是节点 p 邻居。 必须将给定节点拷贝作为对克隆引用返回。...解题思路: 克隆,并且是无向连通,因此可以使用map来保存两个节点之间连接关系,如果在map中没有该节点tmp,则新建节点tmp_copy将该节点存入map中,然后遍历该节点所有邻居,并递拷贝其所有邻居节点至...C++代码: /* // Definition for a Node. class Node { public: int val; vector neighbors;...这是不可能。 说明: 输入先决条件是由边缘列表表示图形,而不是邻接矩阵。详情请参见图表示法。 你可以假定输入先决条件中没有重复边。

1.2K20

遍历(下)——邻接

概述 在我上一篇博客:遍历(上)——邻接矩阵 中主要介绍了邻接矩阵BFS和递归DFS与非递归DFS这3种遍历算法。在这篇博客我将主要叙述邻接以上3中遍历算法。...首先来看看邻接表示方法。 邻接表主要是针对稀疏图中邻接矩阵造成空间浪费而提出。下面我们来看看邻接表示。 1)无向表示 ? 2)有向 ?...(说明:对于BFS,DFS递归与非递归算法在这篇文章就不再重复,如有不了解请移步我上一篇博客:遍历(上)——邻接矩阵 ) ---- 广度优先遍历(BFS) //广度优先遍历(BFS) void...isvisited,0,sizeof(this->isvisited[0])*(this->Nv+1)); cout<<"请输入顶点:"<<endl; //依次构造结点...this->Edgelist[i]->Create(vertex); } cout<<"请输入边:"<<endl; //依次构造无向

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

    邻接矩阵存储结构

    邻接矩阵存储结构 一、知识框架 二、存储方式(这里只讨论邻接矩阵存储方式) 在邻接矩阵存储结构中,顶点信息使用一维数组存储,边信息邻接矩阵使用二维数组存储。...无向和其对应邻接矩阵 有向 三、代码实现 1.头文件AdjMGraph.h 针对是下面这个有向 #pragma once //邻接矩阵存储结构 #include "SeqList.h...,就是邻接矩阵顶点v行中 从第一个矩阵元素开始非0且非无穷大顶点 */ int GetFirstVex(AdjMGraph G, int v) //在G中寻找序号为v顶点第一个邻接顶点 //...对于邻接矩阵存储结构来说,顶点v1邻接顶点v2下一个邻接顶点,就是邻接矩阵顶点 v行中从第v2+1个矩阵元素开始非0且非无穷大顶点 */ int GetNextVex(AdjMGraph G..., int v1, int v2) { //在图中寻找v1顶点邻接顶点v2下一个邻接顶点 //如果这样邻接顶点存在,则返回该邻接顶点序号,否则返回-1 //v1和v2都是相应顶点序号

    59870

    数据结构 邻接

    大家好,又见面了,我是你们朋友全栈君。 呃,下面该写邻接表了……. 邻接出现是因为若是稀疏,用邻接矩阵会造成空间浪费,毕竟你要开辟一个一维数组和一个二维数组嘛,而且还是大开小用那种。...邻接表为了避免内存浪费引入了链式存储,它处理办法是: 1.用一个一维数组存储顶点,当然你也可以用单链表存储, 2.用单链表存储顶点邻接点,可以将顶点改为结构体数组,结构体中存放邻接指针,邻接点也创建一个结构体...下面是一个无向邻接表中数据存储图示如下(emmm,无向果然没有有向好画): emmm,终于画完了,我来介绍下这个 顶点表也就是个结构体数组,是存放顶点结构,顶点表中有data元素...边表也是一个结构体,内有adivex元素,存放邻接下标,weight存放顶点与邻接点之间线权重,next是边表结构体指针,存放该顶点下一个邻接点,next就是负责将顶点邻接点连起来。...numarc; //当前邻接边数 }GraphAdjList; //建立邻接表 void CreateAdjListGraph(GraphAdjList &G) { ArcNode

    1.1K20

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

    概述 作为数据结构书中较为复杂数据结构,对于存储方式分邻接矩阵和邻接表两种方式。在这篇博客中,主要讲述邻接矩阵下深度优先遍历(DFS)与广度优先遍历(BFS)。...---- 广度优先遍历(BFS) BFS 算法思想是:对一个无向连通,在访问图中某一起始顶点 v 后,由 v 出发,依次访问 v 所有未访问过邻接顶点 w1, w2, w3, …wt;然后再顺序访问...w1, w2, w3, …wt 所有还未访问过邻接顶点;再从这些访问过顶点出发,再访问它们所有还未访问过邻接顶点,……,如此直到图中所有顶点都被访问到为止。...,DFS搜索,直至图中所有与v0路径相通顶点都被访问。...3)若该图为非连通,则图中一定还存在未被访问顶点,选取该顶点为起点,重复上述DFS过程,直至图中全部顶点均被访问过为止。

    95220

    数据结构 邻接矩阵

    大家好,又见面了,我是你们朋友全栈君。 邻接矩阵存储方式是用两个数组来实现,一个一维数组存储顶点信息,一个二维数组存储线(无向)或弧(有向信息。...设G有n个顶点,则邻接矩阵是一个n × n方阵,定义为: 无向邻接矩阵,两个顶点有边则为1,否则,为0;因为是无向arc[i][j] = arc[j][i],所以矩阵为对称矩阵,对角线为自己到自己边...设G有是网,有n个顶点,则邻接矩阵是一个n × n方阵,定义为: 无向网和无向差不多,就是加了权值,两个顶点之间无边的话距离是∞。 如果是有向邻接矩阵就不是对称矩阵了。...下面是邻接矩阵存储结构: #define MAXVERTEX 100 //最大顶点数 #define INFINITY 32767 //用有符号int最大值表示无穷大 typedef char...vertextype; //定义定点存储信息为字符型 typedef int arctype; //定义边权值为int型 //邻接矩阵存储结构 typedef struct {

    63010

    【数据结构与算法】 ( 存储形式 | 基本概念 | 表示方式 | 邻接矩阵 | 邻接表 | 创建 | 代码示例 )

    文章目录 一、存储形式 二、基本概念 三、表示方式 1、邻接矩阵 2、邻接表 四、创建 ( 代码示例 ) 一、存储形式 ---- 线性表 中元素 , 有 一个 直接前驱 和 一个...结点之间边 有方向 ; 节点之间边有箭头 ; 带权 : 边 是有 权重 , 计算时不仅要计算路径 , 还要考虑路径权重 ; 三、表示方式 ---- 表示方式 : 邻接矩阵 : 二维数组...; 邻接表 : 链表 ; 1、邻接矩阵 中有 6 个结点 , 0 ~ 5 ; 使用 6x6 矩阵 表示 , 第 i 行 第 j 列 元素表示 结点 i 和 结点 j 是否连接 ; 默认情况下...邻接矩阵 要 为 n 个顶点 分配 n x n 大小空间 , 存储结点间边是否存在 , 这样会造成一定损失 ; 邻接表 中 , 只存储 存在 边 , 不存储 不存在 边 ; 邻接表 底层数据结构...( 代码示例 ) ---- 创建下图数据结构 , 使用 邻接矩阵 表示 ; 使用矩阵表示上图 : \begin{bmatrix} 0 & A & B & C & D & E \\ A & 0 &

    2.3K20

    C语言 | 建立链表,输出各结点中数据

    例42:C语言实现一个简单链表,它由3个学生数据结点组成,要求输出各结点中数据。 解题思路:读者在学习这道例题时候,应该首先分析三个问题。 各个结点是怎么样构成链表?...int num; //学号    float score;//成绩    struct student *next; }; int main()//主函数  {   struct student a,b,c;...=10107;//学号赋值    c.score=85.0;//成绩赋值    head=&a;//将第1个结点起始地址赋给头指针head   a.next=&b;//将第2个结点起始地址赋给第1个结点...next成员   b.next=&c;//将第3个结点起始地址赋给第2个结点next成员    c.next=NULL;//第3个结点next成员赋给null   point=head;   do...C语言 | 建立链表,输出各结点中数据 更多案例可以go公众号:C语言入门到精通

    1.3K2418

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

    题目描述 假设邻接矩阵存储。...输入顶点信息和边信息,完成邻接矩阵设置,并计算各顶点入度、出度和度,并输出图中孤立点(度为0顶点) --程序要求-- 若使用C++只能include一个头文件iostream;若使用C语言只能...—有向,U—无向) 顶点信息 边数 每行一条边(顶点1 顶点2)或弧(弧尾 弧头)信息 输出 每组测试数据输出如下信息(具体输出格式见样例): 邻接矩阵 按顶点信息输出各顶点度(无向)或各顶点出度...在建立时候,数一下出度和入度,这个很简单,看代码就明白了:             matrix[GetIndex(tail)][GetIndex(head)] = 1;            ...outdegree[GetIndex(tail)]++;             indegree[GetIndex(head)]++; 然后如果是无向的话,需要对称建立邻接矩阵:

    27530

    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)...findPath( fv,tv):查找从一个顶点到另一个顶点之间路径。 …… 3. 存储 ---- 存储实现主流有 2 种:邻接矩阵和链接表,本文主要介绍邻接矩阵。...邻接矩阵适合表示关系复杂结构,如互联网上网页之间链接、社交圈中人与人之间社会关系…… 3.2 编码实现邻接矩阵 ---- 3.2.1 基本函数 ---- 因顶点本身有数据含义,需要先定义顶点类型...使用广度和深度搜索遍历时,最后搜索到结点顺序是不相同: 广度遍历顺序:A1->B2->D4->C3->E5。 深度遍历顺序:A1->D4->E5->B2->C3。

    1.2K20

    数据结构:存储结构之邻接

    对于来说,邻接矩阵是不错一种图存储结构,但是我们也发现,对于边数相对顶点较少,这种结构是存在对存储空间极大浪费。...2、图中每个顶点vi所有邻接点构成一个线性表,由于邻接个数不定,所以用单链表存储,无向称为顶点vi边表,有向称为顶点vi作为弧尾出边表。 例如图7-4-6就是一个无向邻接表结构。...若是有向邻接结构是类似的,如图7-4-7,以顶点作为弧尾来存储边表容易得到每个顶点出度,而以顶点为弧头表容易得到顶点入度,即逆邻接表。 ?...下面示例无向邻接表创建:(改编自《大话数据结构》) #include using namespace std; #define MAXVEX 100 /* 最大顶点数,应由用户定义... EdgeNode/* 边表结点  */ {     int adjvex;/* 邻接点域,存储该顶点对应下标 */     EdgeType weight;/* 用于存储权值,对于非网可以不需要

    3.5K81

    详解第一篇:基本概念及其存储结构(邻接矩阵和邻接表)

    2.1 邻接矩阵 首先我们来学习第一种存储结构——邻接矩阵 那邻接矩阵是如何保存顶点和边呢?...,为0就表示两个顶点不连通 那其实观察上面的我们可以发现: 无向邻接矩阵是对称,第i行(列)元素之和,就是顶点i度(边没有权值,只存0/1情况下,元素和就是度) 有向邻接矩阵则不一定是对称...比如二维数组中某一个元素_vertexs[i][j]是1,那就表示下标i和j对应两个顶点是连通。 那怎么建立顶点和数组下标的映射呢?...适合存储稀疏(边比较少),因为邻接表的话有多少边链表里面就存几个对应顶点,不需要额外空间;而上面邻接矩阵不论边多边少都要开一个N*N矩阵(二维数组),边少时候那就大部分位置都存是0 2...然后呢顶点我们还是用一个vector来存,还要建立顶点根下标的映射(每个顶点要跟指针数组下标一一对应),与邻接矩阵不同在于这里边要用链表来存,一个顶点与哪些顶点相连,相连顶点就存到这个顶点对应边链表中

    3.5K10
    领券