happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (302)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (54)
      • DevOps (4)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • apply
  • Patch
  • replace
  • 15
  • 18
  • edit
  • kubernetes

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

35강. 깊이 우선 탐색
컴퓨터 기본 개념

35강. 깊이 우선 탐색

2020. 7. 28. 22:55

1) 깊이 우선 탐색(Depth First Search)

- 탐색을 함에 있어서 보다 깊은 것을 우선적으로 하여 탐색하는 알고리즘

- 깊이 우선 탐색은 기본적으로 전체 노드를 맹목적으로 탐색하고자 할 때 사용한다.

- 스택(Stack) 자료구조에 기초한다.

- 모든 경우의 수를 탐색하고자 할 때 쉽게 사용할 수 있다.

- 시간복잡도 : O(N) -> 정점의 갯수만큼 반복하기 때문에 

 

 

탐색방법)

- 1. 탐색 시작 노드를 스택에 삽입하고 방문처리를 한다.

- 2. 스택의 최상단 노드에게 방문하지 않은 인접 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.

- 3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <studio.h>
#include <studio.h>
#define MAX_SIZE 1001

typedef struct{
    int index;
    struct Nodee *node
} 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*) * (MAX_SIZE));
    for (int i=1; i<=n; i++){
        int x, y;
        scanf("%d %d", &x, &y);
        addFront(a[x], y);
        addFront(a[y], x);
    }
    dfs(1);
    system("pause");
    return 0;
}

 

레알 무슨소린지 모르겠다 하하

'컴퓨터 기본 개념' 카테고리의 다른 글

14장. 다차원 배열과 포인터 배열  (0) 2020.07.29
15강. 동적메모리할당  (0) 2020.07.28
자료구조와 알고리즘 - 그래프 개념과 구현  (0) 2020.07.27
33강. 탐색-순차 탐색과 이진 탐색  (0) 2020.07.27
13강. 컴퓨터가 변수를 처리하는 방법  (0) 2020.07.27
    '컴퓨터 기본 개념' 카테고리의 다른 글
    • 14장. 다차원 배열과 포인터 배열
    • 15강. 동적메모리할당
    • 자료구조와 알고리즘 - 그래프 개념과 구현
    • 33강. 탐색-순차 탐색과 이진 탐색
    happyso
    happyso

    티스토리툴바