Skip to content

Latest commit

ย 

History

History
175 lines (115 loc) ยท 2.75 KB

DFS & BFS.md

File metadata and controls

175 lines (115 loc) ยท 2.75 KB

DFS & BFS


๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ƒ๋‹นํžˆ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ ์‹œ, ์ƒํ™ฉ์— ๋งž๊ฒŒ DFS์™€ BFS๋ฅผ ํ™œ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.


DFS

๋ฃจํŠธ ๋…ธ๋“œ ํ˜น์€ ์ž„์˜ ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋ธŒ๋žœ์น˜๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์—, ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

์Šคํƒ or ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.


  • ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ์— ์ ํ•ฉ

์‹œ๊ฐ„ ๋ณต์žก๋„
  • ์ธ์ ‘ ํ–‰๋ ฌ : O(V^2)
  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : O(V+E)

V๋Š” ์ ‘์ , E๋Š” ๊ฐ„์„ ์„ ๋œปํ•œ๋‹ค


Code
#include <stdio.h>

int map[1001][1001], dfs[1001];

void init(int *, int size);

void DFS(int v, int N) {

	dfs[v] = 1;
	printf("%d ", v);

	for (int i = 1; i <= N; i++) {
		if (map[v][i] == 1 && dfs[i] == 0) {
			DFS(i, N);
		}
	}

}

int main(void) {

	init(map, sizeof(map) / 4);
	init(dfs, sizeof(dfs) / 4);

	int N, M, V;
	scanf("%d%d%d", &N, &M, &V);

	for (int i = 0; i < M; i++)
	{
		int start, end;
		scanf("%d%d", &start, &end);
		map[start][end] = 1;
		map[end][start] = 1;
	}

	DFS(V, N);

	return 0;
}

void init(int *arr, int size) {
	for (int i = 0; i < size; i++)
	{
		arr[i] = 0;
	}
}


BFS

๋ฃจํŠธ ๋…ธ๋“œ ๋˜๋Š” ์ž„์˜ ๋…ธ๋“œ์—์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค. (ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ฃผ๋ณ€๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ)


  • ์ตœ์†Œ ๋น„์šฉ(์ฆ‰, ๋ชจ๋“  ๊ณณ์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ตœ์†Œ ๋น„์šฉ์ด ์šฐ์„ ์ผ ๋•Œ)์— ์ ํ•ฉ

์‹œ๊ฐ„ ๋ณต์žก๋„
  • ์ธ์ ‘ ํ–‰๋ ฌ : O(V^2)
  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : O(V+E)
Code
#include <stdio.h>

int map[1001][1001], bfs[1001];
int queue[1001];

void init(int *, int size);

void BFS(int v, int N) {
	int front = 0, rear = 0;
	int pop;

	printf("%d ", v);
	queue[rear++] = v;
	bfs[v] = 1;

	while (front < rear) {
		pop = queue[front++];

		for (int i = 1; i <= N; i++) {
			if (map[pop][i] == 1 && bfs[i] == 0) {
				printf("%d ", i);
				queue[rear++] = i;
				bfs[i] = 1;
			}
		}
	}

	return;
}

int main(void) {

	init(map, sizeof(map) / 4);
	init(bfs, sizeof(bfs) / 4);
	init(queue, sizeof(queue) / 4);

	int N, M, V;
	scanf("%d%d%d", &N, &M, &V);

	for (int i = 0; i < M; i++)
	{
		int start, end;
		scanf("%d%d", &start, &end);
		map[start][end] = 1;
		map[end][start] = 1;
	}

	BFS(V, N);

	return 0;
}

void init(int *arr, int size) {
	for (int i = 0; i < size; i++)
	{
		arr[i] = 0;
	}
}

์—ฐ์Šต๋ฌธ์ œ : [BOJ] DFS์™€ BFS


[์ฐธ๊ณ  ์ž๋ฃŒ]