rueki
깊이 우선 탐색 (Depth First Search) 본문
728x90
반응형
깊이 우선 탐색
깊은 것을 우선적으로 하여 탐색하는 알고리즘으로, 전체 노드를 탐색하고자 할 때 사용하며, 기본적으로 스택 구조를 사용한다. 모든 경우의 수를 탐색하고자 할 때 쉽게 사용이 가능하다.
1. 탐색 시작노드를 스택에 삽입하고 방문처리한다.
2. 최상단 노드에게 방문하지 않은 인접노드가 있으면, 그 노드를 스택에 넣고 방문처리 한다. 방문하지 않은 인접노드가 없으면 스택에서 최상단 노드를 꺼낸다.
3. 2번과정을 수행할 수 없을 때 까지 반복한다.
실제로는 스택을 사용하지 않아도 구현가능함, 시간 복잡도는 O(N) 의 시간이 소요된다.
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 1001
//연결리스트 정의
typedef struct{
int index;
struct Node *next;
}Node;
Node** a;
int n,m,c[MAX_SIZE]
void addFront(Node *root, int index){
Node *node = (Node*)malloc(sizeof(Node));
node->index = index;
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))
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)
system("pause");
return 0;
}
+
728x90
반응형
'C,C++ 기초 및 자료구조' 카테고리의 다른 글
BOJ 1672. DNA 해독 (0) | 2021.01.02 |
---|---|
메모리 동적할당 예제 (0) | 2020.10.14 |
순차탐색과 이진탐색 (0) | 2020.10.10 |
C++ 클래스의 상속 (0) | 2020.10.09 |
우선순위 큐(priority Queue) (0) | 2020.10.09 |