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

利用邻接表实现无向图C++

邻接表是一种常用的数据结构,用于表示图的连接关系。在无向图中,每个顶点都与其相邻的顶点建立连接。下面是利用邻接表实现无向图的C++代码示例:

代码语言:cpp
复制
#include <iostream>
#include <vector>

using namespace std;

// 无向图的邻接表表示
class Graph {
private:
    int numVertices; // 图中顶点的数量
    vector<vector<int>> adjList; // 邻接表

public:
    // 构造函数
    Graph(int vertices) {
        numVertices = vertices;
        adjList.resize(numVertices);
    }

    // 添加边
    void addEdge(int src, int dest) {
        adjList[src].push_back(dest);
        adjList[dest].push_back(src);
    }

    // 打印图的邻接表
    void printGraph() {
        for (int i = 0; i < numVertices; i++) {
            cout << "顶点 " << i << " 的邻接顶点有:";
            for (int j = 0; j < adjList[i].size(); j++) {
                cout << adjList[i][j] << " ";
            }
            cout << endl;
        }
    }
};

int main() {
    // 创建一个包含5个顶点的无向图
    Graph graph(5);

    // 添加边
    graph.addEdge(0, 1);
    graph.addEdge(0, 4);
    graph.addEdge(1, 2);
    graph.addEdge(1, 3);
    graph.addEdge(1, 4);
    graph.addEdge(2, 3);
    graph.addEdge(3, 4);

    // 打印图的邻接表
    graph.printGraph();

    return 0;
}

这段代码实现了一个无向图的邻接表表示,并提供了添加边和打印邻接表的功能。通过创建一个Graph对象,可以添加边来构建图,并使用printGraph()函数打印图的邻接表。

无向图的邻接表表示优势在于:

  1. 节省空间:相比邻接矩阵,邻接表只存储实际存在的边,节省了空间。
  2. 方便遍历:邻接表中每个顶点的邻接顶点都以链表的形式存储,便于遍历和查找。

邻接表适用于以下场景:

  1. 图中顶点的数量较大,但边的数量较少的情况。
  2. 需要频繁地遍历图的邻接顶点。

腾讯云提供了云计算相关的产品和服务,其中与图计算相关的产品是腾讯云图数据库 Neptune,它是一种高性能、高可靠、全托管的图数据库服务。您可以通过以下链接了解更多关于腾讯云 Neptune 的信息:

腾讯云 Neptune 产品介绍

希望这个答案能够满足您的需求。如果您还有其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

----实现

(有权则为边的权重和) 连通:从任一顶点能够达到另一个任意顶点。...的API: public class Graph Graph(int V)        创建一个含有V个顶点但不含有边的 int V()        顶点数 int E()       ...对于含有上百万个顶点的,V^2的空间需求是不能满足的。 邻接数组:可以实现。使用一个以顶点为索引的列表数组,其中每个元素都是和该顶点相邻的顶点列表。...典型Graph实现的性能复杂度 数据结构 所需空间 添加一条边 检查v、w是否相邻 遍历v所有相邻顶点 边的列表 E 1 E E 邻接矩阵 V^2 1 1 V 邻接 E+V 1 degree(V) degree...(V) 邻接集 E+V logV logV logV+degree(V) 使用邻接实现Graph性能有如下特点: 使用的空间和V+E成正比 添加一条边所需要的时间为常数 遍历顶点v所需要的时间和v的度数成正比

1.9K00

【图论-存邻接矩阵 邻接 链式前

这篇文章主要来讲一下邻接矩阵 邻接 链式前星(本篇需要具备一定的基础知识,至少邻接矩阵之前要会,这里主要讲解邻接和链式前星) 我不大喜欢说废话,所以直接上图 邻接矩阵:用二维数组存储点与点之间的关系...而动态数组,在C语言里面我们用链表,如果是C++的话,用vector。...没错,所以在一定程度上,我认为邻接其实就是邻接矩阵把那些没必要的点给扣掉。...,我个人觉得,可以简单理解为邻接的降为 细看操作 首先来看边的结构 假如,我们有一个 假如说,我们输入一条边: 1 2 5 那这个时候,我们把e[0]的to设置为2,w设置为5。...当然如果你要弄成的话,再反过来添加就可以了 如果是的话,插入第一个点是这样的 然后,我们把1 4 3插入(这个因为是,所以这个地方,e的下标是2) 所以说这个插入顺序和链接顺序有点像栈

53853

的存储方式之前星与邻接

常用的邻接矩阵和邻接都挺简单的,就不提了。 这个是ACM版本的前星,本质就是用数组替换了链表,效果就是更方便一些。 虽然不如十字链表删除方便,但是也能比较方便地写出边删除的操作。...//前星 struct graph{ typedef vector VI; VI info,next,to; //假设现在有n个点,m条边,info长度为n,next...void clear(){ info.clear(); next.resize(0); to.resize(0); } }; 想了一下还是提一下邻接吧...struct Edge{ int from,to,weight; }; vector G[maxn];//可以用来模拟邻接 //使用的时候给对应的数组G[node]插入边即可,其实也挺方便的...另外一个是刘汝佳的蓝书里面的实现,应该也是邻接,只是G[maxn][edgeNum]里面放的不再是直接放边对象,而是改为了边索引号n。

36710

C++ 不知系列之基于链接最短路径搜索

的常用存储方式有 2 种: 邻接炬阵。 链接邻接炬阵的优点和缺点都很明显。优点是简单、易理解,对于大部分结构而言,都是稀疏的,使用矩阵存储空间浪费就较大。...链接表相比较邻接矩阵存储方案,使用起来更方便,对于空间的使用是刚好够用原则,不会产生太多空间浪费。理解起来,也较简单。 本文将以链接方式存储结构,在此基础上实现最短路径搜索。 1....链接 链接的存储思路: 使用链接实现的存储时,有主表和子表概念。 主表: 用来存储对象中的所有顶点数据。 子表: 每一个顶点自身会维护一个子表,用来存储与其相邻的所有顶点数据。...权重可以是时间、速度、量程数…… 2.1 无权最短路径算法 查找图中任意两个顶点间的最短路径长度,可以直接使用广度搜索算法。如下图求解 A0 ~ F5 的最短路径。...总结 本文讲解了如何使用链表存储数据结构,以及使用广度搜索算法实现无权重图中顶点之间的路径搜索。

1.2K20

OJ刷题记录:邻接矩阵表示法验证程序 题目编号:515

邻接矩阵表示法验证程序 题目编号:515 题目描述: 采用邻接矩阵表示,完成的创建、的深度优先遍历、的广度优先遍历操作。其中的顶点信息是字符型,图中顶点序号按字符顺序排列。...本输入样例中所用的如下所示: 输入描述 第一行输入两个值,第一个是图中顶点的个数,第二个是图中边的条数 第二行输入各顶点的信息,即输入每个顶点字符 第三行开始输入每条边,每条边的形式为两个顶点的序号...,中间以空格隔开,输入完一条边换行 输出描述 首先输出的顶点信息,输出完毕换行 接着输出邻接矩阵,假如图中有n个顶点,则输出形式为n行n列的邻接矩阵,输出完毕换行 接下来一行输出从的第一个顶点开始进行深度优先遍历的序列...,中间以空格隔开,输出完毕换行 最后一行输出从的第一个顶点开始进行广度优先遍历的序列,中间以空格隔开,输出完毕换行 输入样例 5 7 A B C D E 0 1 0 2 0 3 1 2...A B C D E 0 1 1 1 0 1 0 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 0 A B C E D A B C D E 解题思路: 坑点:输入的可能含有多个连通分量

79831

Python _系列之基于实现最短路径搜索

的常用存储方式有 2 种: 邻接矩阵 链接 邻接矩阵的优点和缺点都很明显。优点是简单、易理解,对于大部分结构而言,都是稀疏的,使用炬阵存储空间浪费就较大。...链接的存储相比较邻接矩阵,使用起来更方便,对于空间的使用是刚好够用原则,不会产生太多空间浪费。操作起来,也是简单。 本文将以链接方式存储结构,在此基础上实现最短路径搜索。 1....链接 链接的存储思路: 使用链接实现的存储时,有主表和子表概念。 主表: 用来存储对象中的所有顶点数据。 子表: 每一个顶点自身会维护一个子表,用来存储与其相邻的所有顶点数据。...如下图结构中有 5 个顶点,使用邻接保存时,会有主表 1 张,子表 5 张。链接的优点是能够紧凑地表示稀疏。...在 Python 中可以使用列表嵌套实现邻接,这应该是最简单的表达方式。

91040

数据结构与算法 - 邻接 (思想以及实现方式)

邻接储存方式相对于邻接矩阵比较节约空间,对于邻接矩阵需要分别把顶点和边(顶点之间的关系)用一维数组和二维数组储存起来。...邻接 邻接 邻接实现步骤 结构体 创建 顶点和边数,顶点需要用一维数组保存 获取顶点的下标,因为链接结点中的index域是顶点的下标值。...-邻接定义*/ typedef struct { tableHead vertices[20];//图中顶点及各邻接点数组 int vexnum, arcnum;//记录图中顶点数和边或弧数...= tb;//把新建的结点链接在顶点后面 /*如果为,则加入以下代码 e=(EdgeNode*)malloc(sizeof(EdgeNode));...vertices[i].data == data){ return i; } } printf("没有这个字符"); return -1; } 所得有的结构图不一样

3.5K30

加权----Prim算法实现最小生成树

上一篇:加权实现 加权----Kruskal算法实现最小生成树 的生成树是它的一棵含有其所有顶点的环连通子,加权的最小生成树(MST)是它的一棵权值最小的生成树。...Prim算法能够得到任意加权连通的最小生成树。 数据结构设计: 采用一个布尔数组marked[]来记录顶点是否在树中,如果顶点v在,则marked[v]为true。...V个顶点和E条边的连通加权的最小生成树所需空间与E成正比,所需时间与ElogE成正比(最坏情况)。...在v添加进树中时遍历v的邻接检查是否需要更新权重最小的边。...V个顶点和E条边的连通加权的最小生成树所需空间和V成正比,所需时间和ElogV成正比(最坏情况)。

1.6K00

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

的类型: 综上所述,可以分为如下几类: 有: 边有方向的称为有: 边没有方向的称为。 加权: 边上面有权重信息的称为加权: 没有环的被称为。...有: 没有环的有,简称 DAG。...的存储 ---- 的存储实现主流有 2 种:邻接矩阵和链接,本文主要介绍邻接矩阵。 3.1 邻接矩阵实现思路 ---- 使用一维数组存储顶点的信息。 使用二维矩阵(数组)存储顶点之间的关系。...邻接矩阵适合表示关系复杂的结构,如互联网上网页之间的链接、社交圈中人与人之间的社会关系…… 3.2 编码实现邻接矩阵 ---- 3.2.1 基本函数 ---- 因顶点本身有数据含义,需要先定义顶点类型...无权重边的添加: /* * 添加顶点与顶点之间的关系 * */ template void Graph::addEdge(T from,T to) { //检查结点是否存在

1.1K20

教你一招 | Python实现最短路径

算法是基于带权去寻找两个点之间的最短路径,数据存储用邻接矩阵记录。首先画出一幅如下,标出各个节点之间的权值。 ?...其中对应索引: A ——> 0 B ——> 1 C ——> 2 D ——>3 E ——> 4 F ——> 5 G ——> 6 邻接矩阵表示: ?...算法思想是通过Dijkstra算法结合自身想法实现的。...大致思路是:从起始点开始,搜索周围的路径,记录每个点到起始点的权值存到已标记权值节点字典A,将起始点存入已遍历列表B,然后再遍历已标记权值节点字典A,搜索节点周围的路径,如果周围节点存在于B,比较累加权值...,新权值小于已有权值则更新权值和来源节点,否则什么都不做;如果不存在与B,则添加节点和权值和来源节点到A,直到搜索到终点则结束。

3.7K50

Go实战 | 基于有的并发执行流的实现

今天跟大家聊聊在项目中实现的基于有的工作流。 01 工作流(workflow)概述 工作流,是对工作流程中的工作按一定的规则组织在一起并按其进行执行的一种模型。...本文介绍了一种基于有实现的工作流,通过有,可以解决两个问题:从逻辑上,对各个节点的依赖关系进行了组织;从技术上,有依赖关系的节点需要等待执行,依赖关系的可以并发执行。...但本文的目标是介绍其实现思想,所以在示例部分会以穿衣服的流程为例进行讲解。 02 工作流的实现 下面我们以早上起床穿衣所发生的事件为例来讲解有实现。...下面我们就来看看如何实现这样的有的工作流。 2.1 定义工作流结构 根据上图,我们可以看出一个相对完整的工作流包含开始节点(从哪里开始)、边(经过哪些节点)、结束节点(到哪里结束)。...(func() { wf.done <- struct{}{}}) 04 总结 有是一种解决节点依赖关系的利器。

98110

8-2 的存储结构

i ] = 0, 若 ( Vi, Vj ) ∉ E 对于邻接 矩阵第 i 行(或第 i 列)的元素之和是 顶点 Vi的度; 对于有邻接矩阵第 i 行 元素之后为 顶点Vi的出度, 邻接矩阵第...2.邻接 邻接既适用于存储,也适用于存储有邻接存储实现方式是,给图中的每个顶点独自建立一个链表,第i个单链表中的节点包含顶点 i 的所有邻接点。...邻接计算顶点的出度和入度 使用邻接计算图中顶点的入度和出度会非常简单,只需从数组中找到该顶点然后统计此链表中节点的数量即可。...3.邻接多重存储法 的存储可以使用邻接,但在实际使用时,如果想对图中某顶点进行实操(修改或删除),由于邻接中存储该顶点的节点有两个,一个是头结点,另一个时作为其他头结点的邻接点。...其实对于(或无向网),还可以有一种改进方法,使得每个顶点只用1个结点进行存储----邻接多重,可看作是邻接和十字链表的结合。 ?

56730
领券