๐ป
[์๋ฃ๊ตฌ์กฐ] ๊น์ด ์ฐ์ ํ์(DFS) ๋ณธ๋ฌธ
๊น์ด ์ฐ์ ํ์(DFS=Depth First Search)
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฒด ๋ ธ๋๋ฅผ ๋งน๋ชฉ์ ์ผ๋ก ํ์ํ๊ณ ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ๊น์ด ์ฐ์ ํ์์ ์คํ(Stack) ์๋ฃ๊ตฌ์กฐ์ ๊ธฐ์ดํฉ๋๋ค.
1. ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
2. ์คํ์ ์ต์๋จ ๋ ธ๋์๊ฒ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ ๋๋ค.
3. 2๋ฒ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 1001
typeder struct{
int index;
struct Node *next;
} Node;
Node** a;
int n, m, c[MAX_SIZE]; //๋ฐฐ์ด c๋ ์ฐ๊ฒฐ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ฐฐ์ด
void addFront(Node *root, int index, int distance){
Node *node = (Node*)malloc(sizeof(Node));
node->index = index;
node->distance = distance;
node->next = root->next;
root->next = node;
}
void dfs(int x){
if(c[x]) return; //ํด๋น ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ์ผ๋ฉด ๋น ์ ธ๋์จ๋ค
c[x] = 1; //๋ฐฉ๋ฌธํ๋ค.
printf("%d ", x); //๋ฐฉ๋ฌธํ ๋
ธ๋๋ฅผ ์ถ๋ ฅ
Node *cur = a[x]->next;
while(cur!=NULL){
int next = cur->index;
dfs(next); //์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฅผ ํ์
cur = cur->next;
}
}
int main(void){
scanf("%d %d", &n, &m);
a = (Node**)malloc(sizeof(Node*) * (MAX_SIZE));
for(int i=1; i<=n; i++){
a[i]= (Node*)malloc(sizeof(Node));
a[i]->next = NULL;
}
for(int i=0; i<m; i++){
int x, y;
scanf("%d %d", &x, &y);
addFront(a[x], y);
addFront(a[y], x);
}
dfs(1);
return 0;
}
๋ฐ์ํ
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree) (0) | 2020.11.13 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๋๋น ์ฐ์ ํ์(BFS) (0) | 2020.02.21 |
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ์ ๊ฐ๋ ๊ณผ ๊ตฌํ (0) | 2020.02.21 |
[์๋ฃ๊ตฌ์กฐ] ์ฐ์ ์์ ํ (0) | 2020.02.18 |
Comments