当前位置: 首页 > news >正文

C++ 实现深度优先搜索(DFS)的简单示例代码

     C++ 实现深度优先搜索(DFS)的简单示例代码

#include <iostream>
#include <vector>
#include <stack>/**C++ 实现深度优先搜索(DFS)的简单示例代码。这段代码演示了如何在一个无向图中使用 DFS 进行遍历。
首先,定义图的结构。这里使用邻接列表来表示图,每个顶点都有一个列表,存储与其相邻的顶点。*/using namespace std;class Graph {int V; // 顶点的数量vector<vector<int>> adj; // 邻接列表public:Graph(int V); // 构造函数void addEdge(int v, int w); // 添加边void DFS(int start); // 深度优先搜索
};Graph::Graph(int V) {this->V = V;adj.resize(V);
}void Graph::addEdge(int v, int w) {adj[v].push_back(w); // 将 w 添加到 v 的列表中adj[w].push_back(v); // 由于是无向图,也添加 v 到 w 的列表中
}void Graph::DFS(int start) {vector<bool> visited(V, false); // 创建一个访问标志数组stack<int> stack; // 创建一个栈用于 DFSstack.push(start); // 将起始顶点压入栈while (!stack.empty()) {// 从栈中取出一个顶点int v = stack.top();stack.pop();// 如果该顶点尚未被访问过if (!visited[v]) {cout << v << " "; // 输出顶点visited[v] = true; // 标记该顶点为已访问}// 获取所有未访问的邻接顶点,并将它们压入栈for (auto i = adj[v].rbegin(); i != adj[v].rend(); ++i) {if (!visited[*i]) {stack.push(*i);}}}
}int main() {// 创建一个具有 5 个顶点的图Graph g(5);// 添加边g.addEdge(0, 1);g.addEdge(0, 2);g.addEdge(1, 2);g.addEdge(1, 3);g.addEdge(2, 4);g.addEdge(3, 4);cout << "深度优先搜索的遍历顺序是(从顶点 0 开始): ";g.DFS(0);return 0;
}

控制台输出:

深度优先搜索的遍历顺序是(从顶点 0 开始): 0 1 2 4 3 

相关文章:

  • 【OpenCV 基础知识 18】对两图像按位与操作
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • C#屏蔽基类成员
  • 【MySQL】库的基础操作
  • v-rep--lua接口和c++接口的关联
  • Docker自定义镜像
  • 探索未来直播新纪元:Voodoo Spatial 的3D 直播革命
  • Java顺序表
  • web4.0-元宇宙虚拟现实
  • CCF-GESP 等级考试 2023年12月认证C++一级真题
  • JavaScript Window对象
  • 如何让大模型更聪明?提升AI智能的关键策略
  • Cocos Creator 编辑器的数据绑定详解
  • C#同花顺下单 模拟操作版接口实现
  • 【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
  • Android框架之Volley
  • Laravel 实践之路: 数据库迁移与数据填充
  • laravel 用artisan创建自己的模板
  • python学习笔记-类对象的信息
  • React-flux杂记
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Vue.js 移动端适配之 vw 解决方案
  • 聚类分析——Kmeans
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 线上 python http server profile 实践
  • 在weex里面使用chart图表
  • 通过调用文摘列表API获取文摘
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #数据结构 笔记一
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (AngularJS)Angular 控制器之间通信初探
  • (bean配置类的注解开发)学习Spring的第十三天
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (k8s中)docker netty OOM问题记录
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (第二周)效能测试
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (三)终结任务
  • (十三)Flink SQL
  • (未解决)macOS matplotlib 中文是方框
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转) ns2/nam与nam实现相关的文件
  • .NET CORE Aws S3 使用
  • .NET delegate 委托 、 Event 事件,接口回调
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • 。。。。。
  • @DataRedisTest测试redis从未如此丝滑
  • @Repository 注解
  • [22]. 括号生成
  • [Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)