4. 无向图的各连通分支

2023-11-26 21:04
文章标签 无向 连通分支

本文主要是介绍4. 无向图的各连通分支,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

求解无向图的各连通分支

输入:

第一行为图的节点数n(节点编号0至n-1,0<n<=10)
从第二行开始列出图的边,-1表示输入结束

输出:
输出每个连通分支的广度优先搜索序列(从连通分支的最小编号开始),不同分支以最小编号递增顺序列出

sample:
input:
8
0 5
5 2
4 5
5 6
6 2
3 7
-1

output:
0-5-2-4-6
1
3-7

C++代码

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>using namespace std;// 广度优先搜索函数
void bfs(int start, vector<bool>& visited, const vector<vector<int>>& adjList) {queue<int> q;q.push(start);visited[start] = true;while (!q.empty()) {int current = q.front();q.pop();cout << current;  // 输出当前节点// 获取当前节点的所有相邻节点// 如果相邻节点未被访问过,则标记为已访问并加入队列for (int adj : adjList[current]) {if (!visited[adj]) {visited[adj] = true;q.push(adj);}}if (q.size()>0) cout << '-';}
}int main() {int n;cin >> n;  // 读取节点数vector<vector<int>> adjList(n);  // 邻接表vector<bool> visited(n, false);  // 访问标记int u, v;while (true) {cin >> u;if (u == -1) break;cin >> v;adjList[u].push_back(v);  // 添加边adjList[v].push_back(u);  // 假设图是无向图,添加另一条边}// 对所有节点的邻接列表进行排序,以确保按节点编号升序搜索for (auto& edges : adjList) {sort(edges.begin(), edges.end());}// 对每个连通分支执行广度优先搜索for (int i = 0; i < n; ++i) {if (!visited[i]) {bfs(i, visited, adjList);  // 执行广度优先搜索cout << endl;}}return 0;
}

这篇关于4. 无向图的各连通分支的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426301

相关文章

poj 2914 无向图的最小割

题意: 求无向图的最小割。 解析: 点击打开链接 代码: #pragma comment(linker, "/STACK:1677721600")#include <map>#include <set>#include <cmath>#include <queue>#include <stack>#include <vector>#include <cstd

计算多图的等价无向图的邻接链表表示

计算多图的等价无向图的邻接链表表示 摘要:一、引言二、算法思路三、伪代码实现四、C代码实现五、算法分析六、结论 摘要: 在图论中,多图(Multigraph)是一种允许边重复以及存在自循环边(即一个顶点到其自身的边)的图。给定一个多图的邻接链表表示,本文旨在探讨如何构造一个等价的无向图,并给出其邻接链表表示。所谓等价的无向图,指的是在删除所有冗余的边和自循环边后,对于任意两个顶点

【Redundant Paths】【无向图】【双连通分量】【缩点】

Redundant Paths Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Status In order to get from one of the  F(1≤F≤5,000)  grazing fields (which a

卡尔曼滤波器、扩展卡尔曼滤波器、无向卡尔曼滤波器的详细推导

这段时间做轴承故障诊断和预测的时候,需要一个针对已经获取了特征向量的工具来对轴承故障状态进行估计和预测。卡尔曼滤波器可以实现对过去、当前和未来目标位置的估计,所以想通过卡尔曼滤波器的设计思路找到一些灵感。虽然最后发现:卡尔曼滤波器中的状态量是有具体的物理含义的物理量,而表征轴承故障状态的量只是一种表征量。这两者之间存在着本质的差别,因为轴承的退化过程目前为止还不能建模。虽然如此,我还是想将卡尔曼滤

hiho #1127 : 二分图三·二分图最小点覆盖和最大独立集(无向图 二分图匹配)

题目链接:点击打开链接 #1127 : 二分图三·二分图最小点覆盖和最大独立集 时间限制: 10000ms 单点时限: 1000ms 内存限制: 256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了。不过相亲这个事不是说那么容易的,所以Nettle的姑姑打算收集一下之前的情况并再安排一次相亲。所以现在摆在Nettle面前的有2个问题:

图论--无向无权图

图论 文章目录 图论图的基本概念无向图和有向图无权图和有权图 图的数据结构无向无权图有向无权图无向有权图有向有权图 最短路问题概念算法:寻找无权图中的最短路算法:寻找有权图中的最短路 图的基本概念 图是由很多结点和边组成的 点的表示:v,点的集合:V 边的表示:e,边的集合:E 图:G = (V,E) 无向图和有向图 无向图:边没有方向 有向图:边有方向

无向连通网的最小生成树算法[第3部分]

普利姆算法的测试数据如下:每行数据表示边的两个端点和权值10 131 0 42 1 23 0 34 3 85 1 25 2 25 4 16 3 107 4 48 5 48 7 69 6 59 7 2 普利姆最小生成树算法: /*时间:2017.1.1描述:普利姆算法求解最小生成树*/#include<iostream>#include<climits>#in

无向连通网的最小生成树算法[第2部分]

4.2 primMst算法及时间复杂度分析 void primMst(int **AdjMatrix,EDGENODE *edgeSet,int n,int start){int iter,minPos,to;EDGENODE edge;initEdgeSet(AdjMatrix,edgeSet,n,start); //初始化边集合for(iter=0;iter<n-1

无向连通网的最小生成树算法[第1部分]

摘要:求解图的最小生成树在工程管理、最优化规划等领域有广泛的应用,因此对最小生成树算法的研究具有重要的意义。本文针对图的最小生成树算法,首先对几种经典的最小生成树算法进行了总结,最后针对无向连通网的最小生成树问题,分别使用普利姆算法和克鲁斯卡尔算法进行了详细的算法原理分析与程序实现。 关键词:无向连通网;最小生成树算法;普利姆算法;克鲁斯卡尔算法 The Minimum Spanning Tr

【QuikGraph】C#调用第三方库计算有向图、无向图的连通分量

QuikGraph库 项目地址:https://github.com/KeRNeLith/QuikGraph 相关概念 图论、连通分量、强连通分量相关概念,可以从其他博客中复习: https://blog.csdn.net/weixin_50564032/article/details/123289611 https://zhuanlan.zhihu.com/p/37792015 有向图计