有向图的DFS
内存限制: 256 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
给定一个有向图(不一定连通),有 N 个顶点,M 条边,顶点从 1...N 依次编号,求出字典序最小的深度优先搜索顺序。
输入格式
第 1 行:2 个整数,N(1 ≤ N ≤ 200)和 M(2 ≤ M ≤ 5000) 接下来 M 行,每行 2 个整数 I,J,描述一条边从顶点 I 指向顶点 J
输出格式
仅一行,一个顶点编号序列,表示字典序最小的深度优先搜索序列,顶点之间用一个空格分开
样例
样例输入
复制3 3
1 2
1 3
2 3
样例输出
复制1 2 3
#include <bits/stdc++.h>
using namespace std;
int n, m, x, y;
bool visit[5005];
vector<int> a[5005];
void DFS(int p) {
printf("%d ", p);
visit[p] = true;
for(auto i : a[p]) {
if(visit[i]) {
continue;
}
DFS(i);
}
}
int main() {
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; i++) {
scanf("%d %d", &x, &y);
a[x].push_back(y);
}
for(int i = 1; i <= n; i++) {
sort(a[i].begin(), a[i].end());
}
for(int i = 1; i <= n; i++) {
if(!visit[i]) {
DFS(i);
}
}
return 0;
}