1260번: DFS와 BFS
#include<cstdio>
#include<queue>
using namespace std;
bool point[1001][1001];
bool point2[1001][1001];
bool bfsVisit[1001];
queue<int> q;
int n, m, v;
void dfs(int now);
void bfs(int now);
int main()
{
scanf("%d %d %d", &n, &m, &v);
for (int i = 0, s, f; i < m; ++i)
{
scanf("%d %d", &s, &f);
point[s][f] = 1;
point[f][s] = 1;
point2[s][f] = 1;
point2[f][s] = 1;
}
dfs(v);
bfs(v);
}
void dfs(int now)
{
if (point[now][0]++ == 0)
printf("%d ", now);
for (int i = 1; i <= n; ++i)
if (point[now][i] == 1)
{
point[now][i] = 0;
for (int j = 1; j <= n; ++j)
point[j][now] = 0;
dfs(i);
}
}
void bfs(int now)
{
bfsVisit[now] = 1;
printf("\n%d ", now);
q.push(now);
while (!q.empty())
{
now = q.front();
q.pop();
for (int i = 1; i <= n; ++i)
if (point2[now][i] && !bfsVisit[i])
{
++bfsVisit[i];
printf("%d ", i);
q.push(i);
}
}
}