代码如下
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::queue;
using std::sort;
struct Point
{
int data;
vector<int> vect;
};
class Solution
{
public:
int visited[100100];
Point P[100100];
void DFS(int x);
void BFS();
};
void Solution::DFS(int x)
{
cout << x << " ";
for (int i = 0; i < P[x].vect.size(); i++)
{
if (visited[P[x].vect[i]] == 0)
{
visited[P[x].vect[i]] = 1;
DFS(P[x].vect[i]);
}
}
}
void Solution::BFS()
{
queue<int> Q;
Q.push(1);
while (!Q.empty())
{
int x = Q.front();
Q.pop();
cout << x << " ";
for (int i = 0; i < P[x].vect.size(); i++)
{
if (visited[P[x].vect[i]] == 0)
{
visited[P[x].vect[i]] = 1;
Q.push(P[x].vect[i]);
}
}
}
}
Solution S;
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
S.P[i].data = i;
}
for (int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
S.P[x].vect.push_back(y);
}
for (int i = 1; i <= m; i++)
sort(S.P[i].vect.begin(), S.P[i].vect.end());
for (int i = 1; i <= n; i++)
S.visited[i] = 0;
S.DFS(1);
cout << endl;
for (int i = 1; i <= n; i++)
S.visited[i] = 0;
S.BFS();
return 0;
}