๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ฌธ์ ๋ฅผ ํ ๋ ์๋นํ ๋ง์ด ์ฌ์ฉํ๋ค.
๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๋ฌธ์ ์, ์ํฉ์ ๋ง๊ฒ DFS์ BFS๋ฅผ ํ์ฉํ๊ฒ ๋๋ค.
๋ฃจํธ ๋ ธ๋ ํน์ ์์ ๋ ธ๋์์ ๋ค์ ๋ธ๋์น๋ก ๋์ด๊ฐ๊ธฐ ์ ์, ํด๋น ๋ธ๋์น๋ฅผ ๋ชจ๋ ํ์ํ๋ ๋ฐฉ๋ฒ
์คํ or ์ฌ๊ทํจ์๋ฅผ ํตํด ๊ตฌํํ๋ค.
- ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐฉ๋ฌธํด์ผ ํ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ํฉ
- ์ธ์ ํ๋ ฌ : O(V^2)
- ์ธ์ ๋ฆฌ์คํธ : O(V+E)
V๋ ์ ์ , E๋ ๊ฐ์ ์ ๋ปํ๋ค
#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;
}
}
๋ฃจํธ ๋ ธ๋ ๋๋ ์์ ๋ ธ๋์์ ์ธ์ ํ ๋ ธ๋๋ถํฐ ๋จผ์ ํ์ํ๋ ๋ฐฉ๋ฒ
ํ๋ฅผ ํตํด ๊ตฌํํ๋ค. (ํด๋น ๋ ธ๋์ ์ฃผ๋ณ๋ถํฐ ํ์ํด์ผํ๊ธฐ ๋๋ฌธ)
- ์ต์ ๋น์ฉ(์ฆ, ๋ชจ๋ ๊ณณ์ ํ์ํ๋ ๊ฒ๋ณด๋ค ์ต์ ๋น์ฉ์ด ์ฐ์ ์ผ ๋)์ ์ ํฉ
- ์ธ์ ํ๋ ฌ : O(V^2)
- ์ธ์ ๋ฆฌ์คํธ : O(V+E)
#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