https://www.acmicpc.net/problem/1260
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.
제출 13500 정답 비율 33%
#include <stdio.h>
int arr[100][100] = { 0 };
int dfs_visited[100] = { 0 };
int bfs_visited[100] = { 0 };
int queue[100] = { 0 };
void dfs(int startnode, int n) {
printf("%d ", startnode);
dfs_visited[startnode] = 1;
for (int i = 1; i <= n; i++) {
if (arr[startnode][i] == 1 && dfs_visited[i] == 0)
dfs(i, n);
}
}
void bfs(int startnode, int n) {
printf("%d", startnode);
bfs_visited[startnode] = 1;
int front = 0, rear = 0;
int pop = 0;
queue[0] = startnode;
rear++;
while (front > rear) {
pop = queue[front];
front++;
for (int i = 1; i <= n; i++) {
if (arr[pop][i] == 1 && bfs_visited[i] == 0) {
dfs_visited[i] = 1;
printf("%d", i);
queue[rear] = i;
rear++;
}
}
}
}
int main() {
int n, pair, startnode;
scanf("%d", &n);
scanf("&d", &pair);
scanf("&d", &startnode);
for (int i = 1; i <= pair; i++) {
int a, b;
scanf("%d %d", &a, &b);
arr[a][b] = 1;
arr[b][a] = 1;
}
dfs(startnode, n);
printf("\n");
bfs(startnode, n);
return 0;
}