DFS【东北大学oj数据结构11-2】C++

news/2025/1/2 18:34:19/
题面

深度优先搜索(DFS)是一种基于尽可能多地访问相邻顶点策略的图搜索算法。如果顶点 v 有未搜索的顶点则递归搜索直至 v 的最后一条边。在搜索了 v 的所有边之后,搜索继续返回到找到 v 时经过的边。

搜索从原来的起点开始,直到找到所有可达的顶点,如果有未发现的顶点,则以编号最小的顶点作为新的起点继续搜索。

深度优先搜索使用以下时间戳标记每个顶点:
d[v]:记录第一次发现v时的时间。
f[v]:记录v的邻接表被检查完成时的时间。

编写一个程序,显示基于以下规则的给定有向图 G = (V, E) 的深度优先搜索相关信息:

其中图 G 以邻接表的形式给出。每个顶点从 1 到 n 编号。
每个邻接表的顶点按编号升序排列。
程序需要输出每个顶点的发现和完成时间。
备注:
在DFS的过程中,如果要访问的顶点有多个,则选择顶点数最小的那个。
设 1 为第一个要访问的顶点的开始时间。

输入

第一行给出了 G 中的顶点数 n。
接下来的 n 行给出了每个顶点 u 的邻接表,格式如下:
ukv1​v2​…vk​
u 是顶点的编号,k 是 u 的度数,v1​v2​…vk​ 是与 u 相邻的顶点的编号。

输出

输出 n 行,在第 i 行上输出第 i 个顶点的 id、d、f以空格分隔。
id是顶点的编号,d是顶点的发现时间,f是顶点的完成时间。
按顶点编号从小到大输出。

约束

  • 1≤n≤100

输入样例

4
1 1 2
2 1 4
3 0
4 1 3

输出样例

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

代码 
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>
#include <stack>
using namespace std;vector<int> discovery;
vector<int> finish;
vector<bool> visited;
int timee=1;
void dfs(int u,const vector<vector<int> >& adj)
{discovery[u]=timee++;visited[u]=true;for(int i=0;i<adj[u].size();i++){int v=adj[u][i];{if(!visited[v]){dfs(v,adj);}}}finish[u]=timee++;
}
int main() {int n;cin >> n;vector<vector<int>> adj(n);for(int i=0;i<n;i++){int u,k;cin>>u>>k;u--;for(int j=0;j<k;j++){int v;cin>>v;v--;adj[u].push_back(v);}sort(adj[u].begin(),adj[u].end());}// 初始化数据结构discovery.assign(n, -1);finish.assign(n, -1);visited.assign(n, false);// 对每个未访问的节点执行DFSfor (int i = 0; i < n; ++i) {if (!visited[i]) {dfs(i, adj);}}for(int i=0;i<n;i++){cout << (i + 1) << " " << discovery[i] << " " << finish[i] << endl;}return 0;
}

 


http://www.ppmy.cn/news/1559425.html

相关文章

stm32基础(keil创建、Proteus仿真、点亮LED灯,7段数码管)

一、keil的创建 随后点击新建&#xff08;Ctrln&#xff09;,接着保存到所自己项目工程文件。.c .h都是这样操作 二、Proteus的简单使用 左上角框框内可以拖动 三、点亮LED灯代码 led.c #include "stm32f10x.h" // Device headervoid led_init(…

HTTP3详解

最近网上看到了相关HTTP 3的文章&#xff0c;觉得很不错&#xff0c;这里整理记录一下&#xff0c;仅供学习参考。 你连 HTTP2 都还没搞明白&#xff0c;就有人开始谈 HTTP3 了&#xff0c;真让人火大。但 HTTP3 会受到关注也是有理由的&#xff1a;它速度很快。 1、很久以前 …

ES7+ React/Redux/GraphQL/React-Native snippets 使用指南

VS Code React Snippets 使用指南 目录 简介基础方法React 相关React Native 相关Redux 相关PropTypes 相关控制台相关React 组件相关 简介 ES7 React/Redux/GraphQL/React-Native snippets 是一个用于 VS Code 的代码片段插件&#xff0c;它提供了大量用于 React 开发的代…

asp.net 高校学生勤工俭学系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

Linux | 零基础Ubuntu卸载MySQL Server 零痕迹

目录 介绍 移除MySQL软件包 自动移除依赖项 清理残留文件 检查是否还有残留文件 重启系统 介绍 难免会出现一些迷人的操作&#xff0c;让整个数据库都作废了&#xff0c;又改不了文件&#xff0c;修复不了问题&#xff0c;只能重装了&#xff0c;但又卸载不干净&#xf…

Rust : tokio中select!

关于tokio的select宏&#xff0c;有不少的用途。包括超时和竞态选择等。 关于select宏需要关注&#xff0c;相关的异步条件&#xff0c;会同时执行&#xff0c;只是当有一个最早完成时&#xff0c;会执行“抛弃”和“对应”策略。 说明&#xff1a;对本文以下素材的来源表示感…

常见的排序算法过程和比较分析

比较分析 排序类别排序算法时间复杂度&#xff08;最好&#xff09;时间复杂度&#xff08;最坏&#xff09;时间复杂度&#xff08;平均&#xff09;辅助空间复杂度稳定性插入排序直接插入排序O(n)O(n)O(n)O(1)稳定插入排序折半插入排序O(n)O(n)O(n)O(1)稳定插入排序希尔排序…

【SpringBoot】Java中isEmpty使用不当报错空指针

业务场景&#xff1a; 查询区域列表接口&#xff0c;为了提高接口TPS&#xff0c;选择将列表数据加入缓存。 1、请求该接口时&#xff0c;首先查询redis&#xff0c;如果redis不为空&#xff0c;则获取redis中key对应的value值&#xff0c;转换为特定结构返回前端。 2、如果red…