题目描述
已知有向图G的顶点和边,输出图的深度优先遍历结果(从1号结点开始)
输入
输入的第一行两个整数n,m。n表示节点个数,节点用1-n表示,m表示边的条数,第二行起的m行每行 有两个数s,t表示边的起点和终点。
(m<=10000,n,s,t<=100)
输出
图的深度优先遍历结果(从1号结点开始),以空格隔开
样例
输入
8 9
1 2
1 3
1 4
2 5
3 5
4 5
5 6
6 4
7 8
输出
1 2 5 6 4 3 7 8
AC代码:
#include <iostream>
#include <vector>
using namespace std;
void dfs(vector<vector<int>>& graph, vector<bool>& visited, int node) {
visited[node] = true;
cout << node << " ";
for (int i = 0; i < graph[node].size(); i++) {
int neighbor = graph[node][i];
if (!visited[neighbor]) {
dfs(graph, visited, neighbor);
}
}
}
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> graph(n + 1);
vector<bool> visited(n + 1, false);
for (int i = 0; i < m; i++) {
int s, t;
cin >> s >> t;
graph[s].push_back(t);
}
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
dfs(graph, visited, i);
}
}
return 0;
}