C/C++无向图的遍历(bfs和dfs)

2023-05-16

描述

简单介绍一下图,图就是由一些小圆点(称为顶点)和连接这些小圆点的直线(称为边)组成的。例如下图的由五个顶点(编号1、2、3、4、5)和五条边(1-2、1-3、1-5、2-4、3-5)组成。
在这里插入图片描述

要求:

第一行输入节点数n和边的条数m
第一行以后的m行输入节点之间的边,i和j
输出遍历路径进过的节点

示例输入

5 5
1 2
1 3
1 5
2 4
3 5

bfs理论结果为

1 2 3 5 4

dfs理论结果为

1 2 4 3 5

思路

现在咱们从1号节点开始遍历这个图,如果是广度优先bfs算法,1遍历到2了以后,继续找1相连的边(即3和5),于是开始找节点2的边,最后找到4。
如果是深度优先dfs算法,1遍历到2了以后,得继续找到2的所有边,不撞南墙不死心嘛!(即4),2撞了南墙,回头继续把3的所有边撞到南墙,最后找到5

bfs代码如下:

#include<iostream>
using namespace std;

int main(){    //  数组队列实现  bfs遍历无向图 
    int i,j,a,b,n,m,cur,book[101]={0},e[101][101];
    int que[10001],head,tail;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    	for(j=1;j<=n;j++)
    		if(i==j) e[i][j]=0;
    		else e[i][j]=99999999;
    for(i=1;i<=m;i++){
    	cin>>a>>b;
    	e[a][b]=1;
    	e[b][a]=1;
	}
	head=1;tail=1; 
	que[tail++]=1;
	book[1]=1;
	while(head<tail && tail<=n){
		cur=que[head];
		for(i=1;i<=n;i++){
			if(book[i]==0 && e[cur][i]==1){
				que[tail++]=i;
				book[i]=1;
			}
			if(tail>n) break;
		}
		head++;
	}
	for(i=1;i<tail;i++) cout<<que[i]<<" ";
	return 0;
}

dfs代码如下:

#include<iostream>
using namespace std;

int sum=0,n,m,book[101]={0},e[101][101];
void dfs(int cur){
	if(sum==n) return;
	cout<<cur<<" ";
	sum++;
	for(int i=1;i<=n;i++){
		if(book[i]==0 && e[cur][i]==1){
			book[i]=1;
			dfs(i);
			//这里是无向图,不需要回溯 
		}
	}
	return;
}
int main(){    //  递归实现  dfs遍历无向图 
    int i,j,a,b;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    	for(j=1;j<=n;j++)
    		if(i==j) e[i][j]=0;
    		else e[i][j]=99999999;
    for(i=1;i<=m;i++){
    	cin>>a>>b;
    	e[a][b]=1;
    	e[b][a]=1;
	}
	book[1]=1;
	dfs(1);
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C/C++无向图的遍历(bfs和dfs) 的相关文章

  • Maximum Diameter Graph 【CodeForces - 1082D】【搜索+构造】

    题目链接 一开始忘记输出有多少条边 WA了好几发都跑不过第一组测试样例 开始怀疑自己是不是读了道假题 然后在大佬们的帮助下 终于AC 好伤心 读假样例 一定是我太弱了 我的思想是采用了树链剖分的dfs 构造思想 可能是因为最近少用了树链剖分
  • 璀璨光滑【牛客】【题意解析+BFS+贪心】

    题目链接 中文题意 表面平静 实则暗藏玄机 而打开本题的突破口 也确确实实就在于题目的描述 也就是说 这张图的边的数目是确定的 并且这是一张连通图 而且图上的个点每个点连接出去的边的数目都是条 因为每个数都刚好只与个数在二进制位上差1 那么
  • 八数码问题【康托展开+BFS】

    Vijos 题库 八数码问题 背景 Yours和zero在研究A 启发式算法 拿到一道经典的A 问题 但是他们不会做 请你帮他们 描述 在3 3的棋盘上 摆有八个棋子 每个棋子上标有1至8的某一数字 棋盘中留有一个空格 空格用0来表示 空格
  • LeetCode第127题解析

    给定两个单词 beginWord 和 endWord 和一个字典 找到从 beginWord 到 endWord 的最短转换序列的长度 转换需遵循如下规则 每次转换只能改变一个字母 转换过程中的中间单词必须是字典中的单词 说明 如果不存在这
  • uva 1601 The Morning after Halloween code2

    题目 The Morning after Halloween 题意 有n个用小写字母表示的鬼和一张地图 每个鬼都要移动到对应的大写字母 两个鬼的位置不能在一次移动中交换 问最少步数 思路 双向bfs 此题还可以单向bfs 见code1 1
  • 【100%通过率 】【华为OD机试 c++/python】查找单入口空闲区域【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给定一个 m x n 的矩阵 由若干字符 X 和 O 构成 X 表示该处已被占据 O 表示该处空闲 请找到最大的单入口空闲区域 解释 空闲区域是
  • 图论 笔记

    关于存图 如果是有权值的边 可以用pair define pii pair
  • [Wikioi 2808][NOIP 1998普及组]二的幂次方---HBNU的童鞋过来看看

    题目描述 Description 任何一个正整数都可以用2的幂次方表示 例如 137 2 7 2 3 2 0 同时约定次方用括号来表示 即a b可表示为a b 由此可知 137可表示为 2 7 2 3 2 0 进一步 7 2 2 2 2 0
  • [Codeforces 1286B] Numbers on Tree

    Evlampiy was gifted a rooted tree The vertices of the tree are numbered from 1 to n Each of its vertices also has an int
  • 奶酪【BFS】

    题目链接 点从z 0为起点 想跑到z h 只能在球内 或者是球表层上跑 问能否从起点跑到终点 直接暴力bfs判断即可 include
  • [ACM] 1016 Prime Ring Problem (深度优先搜索)

    Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagram Put natural number 1 2 n into
  • Leetcode【DFS BFS】

    Leetcode 200 岛屿数量 题目 解题 思路 DFS解法 BFS解法 题目 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成
  • 递归、加法原理,如何分解问题(独立且完备的划分)

    加法原理适用于做一件事有n种独立不相交且完备的方向 每个方向上有ai种方案 则总的方案数就是 a1 a2 an 例题 把n个数分为k个非空子集 有多少种分法 分解问题 第一个集合里放多少个数把原问题的解分成了独立且完备的若干方向 分别解每个
  • 链式前向星存树图和遍历它的两种方法【dfs、bfs】

    目录 一 链式前向星存图 二 两种遍历方法 一 链式前向星存图 n个点 n 1条边 链式前向星把上面的树图存下来 输入 9 代表要存进去n个点 1 2 下面是n 1条边 每条边连接两个点 1 3 1 7 2 4 4 5 4 6 3 8 3
  • 方板围棋吃子换001

    1 描述 130给定一个二维的矩阵 包含 X 和 O 字母 O 找到所有被 X 围绕的区域 并将这些区域里所有的 O 用 X 填充 示例 X X X X X O O X X X O X X O X X 运行你的函数后 矩阵变为 X X X
  • How far away ? 【HDU - 2586】【DFS+链式前向星优化】

    题目链接 其实这道题可以不用链式前向星优化换做vector lt gt 也是可以跑的 只是会许会慢些而已 来换个中文题意好读些 勇气小镇是一个有着n个房屋的小镇 为什么把它叫做勇气小镇呢 这个故事就要从勇气小镇成立的那天说起了 修建小镇的时
  • 无向图染色问题-dfs剪枝

    无向图染色问题 问题描述 给定一个无向图 要求用最少的颜色将节点染色 限制是不能让相邻节点染上相同的颜色 算法 使用dfs 为节点分配不同的颜色进行尝试 计算每种分配所需的颜色数 最终进行回溯 取得最小的颜色数 代码 C include
  • 基于振动传感器数据构建预测性维护AI模型

    预测性维修 Predictive Maintenance 简称PdM 是以状态为依据 Condition Based 的维修 在机器运行时 对它的主要 或需要 部位进行定期 或连续 的状态监测和故障诊断 判定装备所处的状态 预测装备状态未来
  • [SDOI2012]拯救小云公主【bfs+二分答案】

    题目链接 正难则反 要直接求从起点到终点的最大距离 不妨反过来求最小的可以阻止骑士从起点到终点的对于全体圆的最小半径 那么 就是阻止从左上角到右下角的所有相交圆 于是 就是要变成没有从左上角到右下角的相交圆才可以 那么不妨跑一个bfs来判断
  • DFS的个人理解和测试例题

    深度优先搜索 DFS 是一种搜索手段 可以理解为 它从某个位置 起点 开始 沿着一条路不断地向前走直到尽头 然后退后一步 去走其它没走过的路 没有的话 再退后一步 再去选择 直到找到目的地 终点 例如下图 从A 起点 开始走 先走ABD 在

随机推荐

  • D435i运行vins-fusion性能提升

    1 mavros imu data mavros imu data raw选用区别 2 vins estimator odometry 话题转发给 mavros vision pose pose 3 关闭D435i的自动曝光 xff0c 设
  • 关于cartographer建立正确关系树的理解

    正确的TF关系map odom base link laser base link是固定在机器人本体上的坐标系 xff0c 通常选择飞控 其中map odom 的链接是由cartographer中lua文件配置完成的 map frame s
  • noetic ---lunar_devel melodic--indigo_devel

    对应关系
  • tf监听两个坐标系关系

    tf监听器 tf span class token operator span TransformListener listener span class token punctuation span span class token co
  • IDEA 2019 Tomcat日志中文乱码问题解决

    操作系统版本 Windows 10 1809 IDEA版本 2019 1 1 Tomcat版本 8 5 38 解决方法 修改conf logging properties配置文件 将其中的UTF 8改为GBK 1catalina org a
  • docker无法从docker hub下载镜像

    root 64 localhost docker docker info Containers 1 Running 1 Paused 0 Stopped 0 Images 2 Server Version 17 09 0 ce Storag
  • 下载yum源报错,无法解析mirrors.aliyun.com

    最近使用centOS安装Oracle xff0c 下载文件提示正在解析主机 mirrors aliyun com mirrors aliyun com 失败 xff1a 未知的名称或服务 解决这个问题简单 xff0c 需要在网络访问中改配置
  • 团队效率工具: 代码格式化之Clang-format

    介绍 平时团队进行合作的时候需要注意代码的格式 xff0c 虽然很难统一每个人的编码风格 xff0c 但是通过工具能够很好的管理代码格式 这里介绍下clang format xff0c 它是基于clang的一个命令行工具 xff0c 能够自
  • 关于头文件保护和变量重复定义的一点理解

    之前一直都有一个困惑 xff1a 既然头文件一般都有避免重复编译的预编译条件保护 xff0c 那为什么在头文件中定义全局变量就会出现重复定义的错误呢 xff1f 这个困惑持续了很久 xff0c 一直到最近才算大概理解 现记录于此 xff0c
  • YOLOv4剪枝【附代码】

    本项目只是负责把框架搭建起来 xff0c 没有进行重训练的微调或者去研究应该剪哪里比较好 xff0c 需要自己去研究 YOLOv4代码参考 xff1a Pytorch 搭建自己的YoloV4目标检测平台 xff08 Bubbliiiing
  • 爬虫 | Selenium库

    一 基础 1 定义 自动化测试工具 xff0c 支持多种浏览器 爬虫中主要用来解决JavaScript渲染的问题便捷地获取网站中动态加载的数据便捷实现模拟登录 2 使用流程 环境安装 xff1a pip install selenium下载
  • java李白打酒蓝桥杯

    题目 xff1a 李白打酒 话说大诗人李白 xff0c 一生好饮 幸好他从不开车 gt gt 一天 xff0c 他提着酒壶 xff0c 从家里出来 xff0c 酒壶中有酒2斗 他边走边唱 xff1a gt gt 无事街上走 xff0c 提壶
  • java求abc的全排列

    给定一个 没有重复 数字的序列 xff0c 返回其所有可能的全排列 示例 输入 abc 输出 xff1a abc acb bac bca cab cba 这里可以使用深度优先遍历 xff0c 遍历完a遍历b xff0c 最后遍历c java
  • java最大公共子序列

    题目 xff1a 求两个字符串的最大公共子序列 这里子序列和子串需要区分一下 xff0c 子序列不需要字符串里元素紧挨着 xff0c 但子串要求前后元素紧挨 xff0c 这里求子序列可以用递归法来做 代码如下 xff1a span clas
  • java矩阵乘法

    试题 基础练习 矩阵乘法 资源限制 时间限制 xff1a 1 0s 内存限制 xff1a 512 0MB 问题描述 给定一个N阶矩阵A xff0c 输出A的M次幂 xff08 M是非负整数 xff09 例如 xff1a 矩阵A为 1 2 3
  • java实现蓝桥杯单词分析

    单词分析 686 题目描述 小蓝正在学习一门神奇的语言 xff0c 这门语言中的单词都是由小写英文字母组 成 xff0c 有些单词很长 xff0c 远远超过正常英文单词的长度 小蓝学了很长时间也记不住一些单词 xff0c 他准备不再完全记忆
  • Java实现N皇后问题

    八皇后问题 xff08 英文 xff1a Eight queens xff09 xff0c 是由国际西洋棋棋手马克斯 贝瑟尔于1848年提出的问题 xff0c 是回溯算法的典型案例 问题表述为 xff1a 在8 8格的国际象棋上摆放8个皇后
  • C++求解整数划分问题(递归)

    整数划分问题是算法中的一个经典命题之一 xff0c 有关这个问题的讲述在讲解到递归时基本都将涉及 所谓整数划分 xff0c 是指把一个正整数n写成如下形式 xff1a n 61 m1 43 m2 43 43 mi xff08 其中mi为正整
  • java两个字符串的删除操作(动态规划)

    两个字符串的删除操作 给定两个单词 word1 和 word2 xff0c 找到使得 word1 和 word2 相同所需的最小步数 xff0c 每步可以删除任意一个字符串中的一个字符 xff08 力扣 xff09 示例 输入 sea ea
  • C/C++无向图的遍历(bfs和dfs)

    描述 简单介绍一下图 xff0c 图就是由一些小圆点 xff08 称为顶点 xff09 和连接这些小圆点的直线 xff08 称为边 xff09 组成的 例如下图的由五个顶点 xff08 编号1 2 3 4 5 xff09 和五条边 xff0