邻接表实现BFS和DFS C++

用邻接表和邻接矩阵实现图结构:C++实战代码详解(附DFS/BFS对比) 本文详细介绍了在C++中使用邻接表和邻接矩阵实现图结构的实战代码,并对比了DFS和BFS算法的性能与应用场景。通过完整的代码示例和性能分析,帮助开发者掌握图结构的核心实现技术,优化算法选择,适用于社交网络、路径查找等多种复杂关系数据处理场景。 阅读详情

 邻接表实现BFS和DFS C++

#include <iostream>
#include<vector>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;

struct Edge{
	int to;
	int w;
};
vector<Edge> a[100];
int visit[100];

void dfs(int x) {
	visit[x] = 1;
	cout <<x<< endl;
	for (int i = 0; i < a[x].size(); i++) {
		if (!visit[a[x][i].to]) {
			dfs(a[x][i].to);
		   }
	 }
}

void bfs(int x) {
	queue<int>Q;
	visit[x]=1;
	Q.push(x);
	cout << x << endl;
	while (!Q.empty()) {
		int w = Q.front();

		Q.pop();
		for (int i = 0; i < a[w].size(); i++) {
			if (!visit[a[w][i].to]) {
				visit[a[w][i].to] = 1;
				Q.push(a[w][i].to);
				cout << a[w][i].to << endl;
			}
		}
	}
}

void BFStraverse(int n){
	
	for(int i=1;i<=n;i++){
		if(!visit[i]){
			bfs(i);
		}
	}
	
	
	
}

void DFStraverse(int n){
		for(int i=1;i<=n;i++){
		if(!visit[i]){
			dfs(i);
		}
	}
	
} 



int main()
{
	int n, m;
	cin >> n >> m;
	int x, y, z;
	for (int i = 1; i <= m; i++) {
		cin >> x >> y >> z;
		Edge e;
		e.to = y, e.w = z;
		a[x].push_back(e);
	}

	memset(visit, 0, sizeof(visit));
	//bfs(1);
	//BFStraverse(n);
	DFStraverse(n);
	return 0;
}

测试数据:

9 10
1 2 1
1 3 1
1 4 1
2 5 1
2 6 1
3 6 1
3 7 1
3 8 1
4 8 1
4 9 1
4 9 1
 

BFS 输出结果:

DFS输出结果:

 

 

图的两种结构(邻接矩阵、邻接表)DFS、BFS算法 #include #include #include #include #include using namespace std; #define MAXSIZE 20 bool flag = false; class MGraph { public: MGraph(int vertex, int side); ~MGraph(){}; void DFSTraverse(i 阅读详情

相关推荐

广度优先算法算法BFS的原理及C++实现

本文详细介绍了广度优先搜索(BFS)算法的原理、实现和应用。BFS是一种基于队列的图遍历算法,其核心思想是按层次遍历节点,适用于求解无权图的最短路径问题。文章阐述了BFS的状态转移过程、时间复杂度分析(O(n)或O(m)),并提供了多种实现方式(包括常规队列、滚动队列优化等)。典型应用场景包括游戏地图寻路、网络拓扑分析等。文中还给出了C++实现代码、测试用例和性能优化技巧,并附有相关算法题目分类和难度分级。最后提供了作者的教学视频和算法资料下载链接。

闻缺陷则喜何志丹 3981

c++邻接表实现BFS算法遍历

程序只能遍历连通图,如果想遍历不连通的,那需要再在BFS函数里面加个for循环,遍历visited数组。 代码写的很乱,半C不C。 代码是从创建队列到生成邻接表图再到BFS遍历。 因为是邻接表,所以我的算法是这样: 1.假设从v0这个头结点开始,进队列,然后出队,设置visited数组。用一个变量e接住头结点v0 2.进入循环,while(!Q.empty()),然后在写个for(auto i=e.first;i;i=i->next),这里就是在遍历边结点了 3.因为边结点的数据结构,里面

u013677637的博客 2484

EDA与机器学习融合:智能优化芯片设计流程的工程实践

机器学习作为数据驱动的核心技术,通过从历史数据中学习复杂模式,实现对系统行为的预测与优化。其原理在于构建模型,将输入特征映射到目标变量,从而揭示数据背后的内在规律。在工程领域,这项技术的核心价值在于能够将专家经验转化为可量化、可复用的智能模型,显著提升自动化水平与决策效率。电子设计自动化(EDA)是芯片设计的关键支撑,传统流程高度依赖人工试错,面临参数空间巨大、优化周期长等挑战。将机器学习应用于EDA,能够构建预测模型来预估设计性能(PPA),或通过代理模型加速设计空间探索,实现智能化的设计辅助与优化。本文

weixin_30411239的博客 684

图的邻接表 表示 DFS 和BFS C++实现

/* * File name : Lgraph.cpp * Function : 图的学习, 邻接表 深度优先遍历和广度优先遍历 C++实现 * Created on : 2016年5月30日 * Author : beijiwei@qq.com * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。 任何单位和个人不经本人允许不

NTSK13 1937

学习笔记之——Event Camera(事件相机)调研

概述 Event Camera是一种bio-inspired sensor,对应的领域为bio-inspired vision。对于传统的相机,从某种程度上,是捕获一个静态/静止的空间,而Event Camera的目的是:敏感地捕捉运动的物体。 对于传统RGB-camera,相机传回的信息是同步的,所谓同步,就是在某一时刻t,相机会进行曝光,把这一时刻所有的像素填在一个矩阵里回传,一张照片就诞生了。一张照片上所有的像素都对应着同一时刻。至于视频,不过是很多帧的图片,相邻图片间的时间间隔...

gwpscut的博客 3万+

晶圆测试(Wafer Sort)的核心技术与良率提升策略

晶圆测试(Wafer Sort)是芯片制造中的关键“入学考试”,通过探针台与自动测试设备(ATE)对晶圆上的芯片进行功能与参数测试,筛选不合格芯片以控制成本。本文深入解析了其核心技术,包括自动化视觉系统对准、测试流程优化策略,并探讨如何利用测试数据驱动良率提升,展望了DFT与AI智能测试的未来趋势。

e4f5g6h的博客 517

邻接表储存图实现广度优先遍历(C++)

通过给出的图的顶点和边的信息,构建无向图的邻接表存储结构。在此基础上,从A顶点开始,对无向图进行广度优先遍历,输出遍历序列。(1)从测试数据读入顶点和边信息,建立无向图邻接表存储结构;(2)把构建好的邻接表输入显示;(3)从A顶点开始,编写BFS广度优先遍历算法;(4)输出广度优先遍历序列。

qq_74156152的博客 3131

双翌视觉系统配合机械手大视野定位案例(单目标带角度抓取)

一、定位原理概述 1.系统构架 视觉定位系统采用正向打光方式,光源在机械手上方,CCD从上往下拍摄,进行图像分析定位。相机将计算出的像素坐标转换为机械手的物理坐标,视觉软件与机械手进行网口通讯,将视野内物料的物理坐标发送给机械手,机械手抓取物料放在指定工位。 2.相机标定概述 系统采用宫格标定确定像素坐标和物理坐标一一对应关系,同时利用3点或者多点旋转标定求出旋转中心 系统采用宫格标定,自定义行列数和间距及旋转角度,通过机械手发送的当...

weixin_51554164的博客 2172

图的基础 邻接表 dfs bfs前置知识

本文包括图的基础 性质 类别 加几种建图方式

weixin_46879396的博客 412

052、联发科Imagiq HyperEngine架构适配:天玑9000/9200的ISP多核并行调度与Tuning Toolkit调优案例

摘要: 项目组在适配联发科天玑9200的Imagiq 890 ISP架构时,遇到多摄预览功耗过高、帧率不稳等问题。通过分析多核调度机制,调整辅核QoS通道、优化AI-ISP协同模式(采用FREERUN+运动补偿),并利用Tuning Toolkit的Pipeline Viewer动态分配负载,最终降低功耗30mA、提升画质。关键经验包括:避免多核带宽冲突、合理配置动态时钟策略,以及统一校准参数版本管理。天玑9000/9200的HyperEngine架构需优先理解多核协同逻辑,再针对性调优,否则易引发场景兼容

zzfmlxs的博客 36

【全局路径规划地图算法】Voronoi路径规划探索(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对Voronoi路径规划探索做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 2240

详解邻接矩阵和邻接表分别实现DFS和BFS——C++

题目: 采用邻接矩阵和邻接表存储结构来建立有向图或无向图,实现深度优先或广度优先的遍历算法。 测试图: 代码1: /*采用邻接矩阵存储图*/ #include<iostream> #include<cstring> #include<queue> #include<map> using namespace std; const int INF=0x3f3f3f3f; const int MVNum=100; //最大顶点数 int visite

枯木何日可逢春 1738

AI预测彩票,使用chatgpt和lstm神经网络(文末附源码)

AI预测彩票,使用chatgpt和lstm神经网络(文末有彩蛋)

淘淘小窝 1万+

图的邻接矩阵、邻接表存储和图的广度优先搜索(BFS)、深度优先搜索(DFS)

图的邻接矩阵和邻接表表示。广度优先搜索(BFS)、深度优先搜索(DFS)及 C++ 实现。

Dong_HFUT的博客 8300

亚马逊爬虫实战:中国商家信息(电话)爬取

import os), # 保存图片的路径# 搜索关键词"keywords":["毛巾","衣服"],"product_number": 1000000000000000, # 分页获取数量# 和url一一对应 个数要一样"remarks": ["备注1"],# 以下内容非专业人员请勿更改,请找开发人员更改. 对应的是amazon_product_url_setting文件中名称.},

youbingchen的博客 1524

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

邻接表实现DFS和BFS

题目 用邻接表存储下图 ,并实现BFS和DFS。 解题思路 这是一个带权无向图,题目要求用一个邻接表存储,可以是一个链表数组,但本题采用C++STL中的multimap实现。把一个char字符与一个结构体节点进行映射,形成多个映射。每个结构体节点包括一个char类型的数据和一个int类型的权。这里采用char字符是为了使节点更加常规化。 再采用BFS和DFS对该表从0节点开始做一个遍历,思路也比...

Missjust的博客 1813

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++实现图 - 02 图的遍历(DFS、BFS)

数据结构与算法专栏 —— C++实现深度优先搜索 ,简称为 DFS 。事实上,我们在树的遍历中早已涉及 DFS ,层、前序遍历、中序遍历和后序遍历都属于深度优先遍历的方式,因为这些遍历方式本质上都归结于栈。为了方便大家理解,我们还是以画图的方式来呈现(我们从结点 1 开始遍历): 1、从结点 1 的第一个相邻结点即结点 2 开始遍历,先遍历哪个点一般取决于存储边的时候是以什么方式进行。 2、以相同的方式继续沿结点的第一个相邻结点即结点 2 遍历,就这样一直往前递归遍历直至无法继续向前。 3、同上,往结

Newin2020的博客 3493

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_图的BFS、DFS

BFS、DFS分别为广度优先搜索和深度优先搜索的英文首字母缩写。先考虑树的BFS、DFS。树的BFS即层序遍历。层序遍历先访问根结点,再逐个访问根结点的子结点,再逐个访问上述子结点的子结点,以此类推,直至访问过所有结点。树的DFS有三种(先序遍历、中序遍历、后序遍历),这里只说先序遍历。先序遍历先访问根结点,再逐个先序遍历根结点的所有子树。(由递归的定义可知,容易用递归算法实现(函数的递归用到了调...

weixin_39527768的博客 4584

C++用邻接表实现图的深度优先和广度优先遍历算法

#include <iostream> #include <queue> using namespace std; const int VEX_MAX = 100; bool visited[VEX_MAX]; //链表部分 struct Node { int vex; //结点下标 int weight; //权重 struct Node* next; }; //头指针部分 typedef struct ENode { char data; //结点数据 N

weixin_45597497的博客 6977

数据结构C++——图的遍历DFS和BFS

数据结构C++——图的遍历DFS和BFS 文章目录数据结构C++——图的遍历DFS和BFS一、深度优先搜索遍历(DFS)①DFS的过程②FirstAdjVex()函数的代码实现③NextAdjVex()函数的代码实现④深度优先搜索遍历连通图⑤深度优先搜索遍历非连通图⑥采用邻接矩阵表示DFS⑦采用邻接表表示DFS⑧测试的完整代码二、广度优先搜索遍历①BFS的过程②广度优先搜索遍历连通图③广度优先搜索遍历非连通图④采用邻接矩阵表示BFS⑤采用邻接表表示BFS⑥测试的完整代码三、总结 一、深度优先搜索遍历(DFS

qq_54162207的博客 3175

C++ 图的邻接表存储与搜索遍历(DFS、BFS)

#include &lt;bits/stdc++.h&gt; #define MaxSize 100 /* * Created by HarvestWu on 2018/06/22. */ using namespace std; typedef int ElemType; //边表 typedef struct ArcNode { int adjvex; /...

HarvestWu的博客 1862

(造轮子)C 创建队列和图实现广度优先算法(BFS)和深度优先算法(DFS)(数据结构)

C 实现队列和链表(造轮子) 队列的链式存储结构 队列的链式表示称为链队列,它实际上是一个同时带有队头指针和队尾指针的单链表。头指针指向队头节点,尾指针指向队尾节点,即单链表的最后一个节点(与顺序表存储结构不同)。 ```sql 在这里插入代码片 ...

Wang121201的博客 1123

图的深度优先(DFS)和广度优先(BFS)遍历

图的深度优先搜索遍历(DFS)类似于二叉树的先序遍历 图的广度优先搜索遍历(DFS)类似于树的层次遍历 #include<stdio.h> #include<iostream> #define maxsize 20 using namespace std; //表结点 typedef struct ArcNode { int adjvex; //该边指向的结点位置 struct ArcNode* nextarc; //指向下条边的指针 int info; //存储边的相关

theonepiece的博客 1400

用邻接表存储有向图并实现DFS(递归+非递归)BFS(非递归)两种遍历

代码如下: #include #include #include #include using namespace std; #define MAX 20 typedef char Dtype; typedef int mapmax[MAX][MAX]; int visited[MAX]; //-----------邻接表-------------- typedef char Diantype

Singular__point的博客 3554

c++ 由无向图构造邻接表,实现深度优先遍历、广度优先遍历。

/* 首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点 为起始点,进行深度优先、广度优先搜索遍历,并输出遍历的结果。 */ #include <stdlib.h> #include <iostream> #define MVNum 100 //最大的顶点数 using namespace std; /*—...

ata69104的博客 2250

(超详细)C++图的深度优先遍历、广度优先遍历(数据结构)

(超详细)C++图的深度优先遍历、广度优先遍历(数据结构)。根据下图,编写代码实现图的深度优先遍历和广度优先遍历。按照英文字母顺序,以邻接表为存储结构,实现图的深度优先和广度优先遍历。遍历的顺序从顶点a开始。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。

m0_54158068的博客 2万+
上一篇: 弗洛伊德算法及代码实现
下一篇: 地址解析协议 ARP
木禾DING
博客等级 码龄8年 191粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值