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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

알고리즘/알고리즘 개념

그래프의 탐색(DFS, BFS)

2020. 8. 4. 23:29

그래프 탐색의 목적 : 임의의 시작점 x에서 시작해서 모든 정점을 한번씩 반복하는 것

 

1. DFS(깊이우선탐색) 

- 한 시작점에서 갈 수 있을때 까지 계속진행하다 뒤도돌아오고 다시 갈수있는데 까지 감

- 스택사용해서 갈 수 있는 만큼 최대한 많이가고

- 갈 수 없으면 이전 정점으로 돌아간다.

- 재귀호출을 이용해서 구현할 수 있다.

// dfs(x) : x에 방문했다는 의미
// 인접 행렬
void dfs(int x){
    check[x] = true;
    printf("%d",x);
    for(int i=1; i<=n; i++){
        if(a[x][i] == 1 && check[i] == false){
            dfs(i);
        }
    }
}

 

// dfs(x) : x에 방문했다는 의미
// 인접 리스트
void dfs(int x){
    check[x] = true;
    printf("%d",x);
    for(int i=0; i<=a[x].size(); i++){
        int y = a[x][i];
        if(check[y] == false){
            dfs(y);
        }
    }
}

 

 

2. BFS(너비우선탐색)

- 한 정점에서 갈수 있는 걸 다 동시에 감, 쭉쭉퍼져나감

- Queue를 이용해서 할 수 있다.

//인접 행렬
queue<int> q;
check[1] = true; q.push(1);
while(!q.empty()){
    int x = q.front(); q.pop();
    printf("%d",x);
    for(int i=1; i<=n; i++){
        if(a[x][i] == 1 && check[i] == false){
            check[i] = true;
            q.push(i);
        }
    }
}

 

//인접 리스트
queue<int> q;
check[1] = true; q.push(1);
while(!q.empty()){
    int x = q.front(); q.pop();
    printf("%d",x);
    for(int i=0; i<a[x].size(); i++){
        int y = a[x][i];
        if(a[y] == false){
            check[y] = true; q.push(y);
        }
    }
}

 

 

 

이분그래프

그래프의 정점을 이분으로 나누어 논 그래프

어떠한 조건? A에 들어있는 정점끼리는 서로 연결하는 간선이 없어야함

DFS 또는 BFS 탐색으로 이분 그래프인지 아닌지 알아낼 수 있다.

 

'알고리즘 > 알고리즘 개념' 카테고리의 다른 글

정렬 알고리즘  (0) 2020.10.21
자료구조와 알고리즘  (0) 2020.10.14
탐욕알고리즘(Greedy)  (0) 2020.08.22
다이나믹 프로그래밍  (0) 2020.08.11
그래프와 BFS  (0) 2020.08.03
    '알고리즘/알고리즘 개념' 카테고리의 다른 글
    • 자료구조와 알고리즘
    • 탐욕알고리즘(Greedy)
    • 다이나믹 프로그래밍
    • 그래프와 BFS
    happyso
    happyso

    티스토리툴바