[C] 백준1260 DFS와 BFS

z00m__in·2021년 6월 19일
0

Algorithm - Graph

목록 보기
3/4

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;
}
profile
우당탕탕 기록지

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN