๐Ÿ’ป

[์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ธฐ๋ณธ๊ธฐ ๋‹ค์ง€๊ธฐ

[์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„

๋˜ํšจ๋‹ˆ 2020. 2. 29. 18:53

์–ด๋Š์ •๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ•ด ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ๋ชจ๋“  ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์— ๊ฑฐ์˜ ๋‹จ๊ณจ๋กœ ์ถœ์ œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ DFS, BFS ์ด๋‹ค.

๋ฐฑ์ค€ ๋ฌธ์ œํ’€์ด๋ฅผ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋‚˜๋ฅผ ํž˜๋“ค๊ฒŒ ํ–ˆ๋˜ ๊ฒƒ๋„ ๋ฐ”๋กœ DFS์™€BFS!!  ๊ทธ๋ž˜์„œ ๋‚˜์™€ ๊ฐ™์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ƒˆ๋‚ด๊ธฐ ์™•์ดˆ๋ณด๋“ค์„ ์œ„ํ•ด ์™„์ „ ์ •๋ณต์ด๋ผ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์˜ฌ๋ฆฌ๊ณ ์ž ํ•œ๋‹ค.  ๊ธ€์„ ์“ฐ๋ฉด์„œ ๋‚˜๋„ ๊ณต๋ถ€ํ•˜๊ณ , ์ž๋ฃŒ๊ฐ€ ๋ถ€๋”” ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์ž…๋‹ˆ๋‹ค :)


1. ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„

 

์ธ์ ‘ ํ–‰๋ ฌ

- ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ์ผ ๋•Œ A[i][j], A[j][i]

- ์ธ์ ‘ ํ–‰๋ ฌ์€ ์—†๋Š” ๊ฐ„์„ ๋„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์“ฐ์ด์ง€๋Š” ์•Š๋Š”๋‹ค. ์‰ฌ์šด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 

- ์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(V^2)์ด๋‹ค.

 

 

  • ๊ฐ€์ค‘์น˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ) 
#include <cstdio>
#include <vector>

int a[10][10];
int main(){
          int n,m;
          scanf("%d %d", &n, &m);
          for(int i=0; i<m; i++){
                int u,v;
                scanf("%d %d", &u, &v);
                a[u][v] = 1;
                a[v][u] = 1; //๋‹จ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ผ๋•Œ๋Š” ํ•„์š”์—†๋‹ค
          }
}

 

  • ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ)

- ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋ฅผ ๊ฐ€์ค‘์น˜ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด๋œ๋‹ค. A[i][j] = W

#include <cstdio>
#include <vector>

int a[10][10];
int main(){
          int n,m;
          scanf("%d %d", &n, &m);
          for(int i=0; i<m; i++){
                int u,v,w;
                scanf("%d %d %d", &u, &v, &w);
                a[u][v] = w;
                a[v][u] = w
          }
}

 

 

 

 

 

 

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

 

- ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(E) ์ด๋‹ค. 

- ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค. 

- ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค. 

- A[i] = i์™€ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

- ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜๋ ค๋Š” ๊ฒƒ์ธ๋ฐ ๊ตฌํ˜„ํ•˜๊ธฐ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ์ฃผ๋กœ c++์˜ vector๋‚˜ ์ž๋ฐ”์˜ arraylist์™€ ๊ฐ™์ด ๊ธธ์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค. 

 

โ€ป ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ ํ•  ์ 

vector<int>  a(10) => ํฌ๊ธฐ๊ฐ€ 10์ธ ์ผ์ฐจ์› ๋ฐฐ์—ด int a[10]

vector<int>  a[10]  => ๋ฐฐ์—ด์„ ์˜๋ฏธ vector<int> a๊ฐ€ 10๊ฐœ ์žˆ๋‹ค๋Š” ๊ฒƒ

 

 

  • ๊ฐ€์ค‘์น˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ)

์—ฌ๊ธฐ์„œ์˜ ์ˆซ์ž๋Š” ์ •์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ„์„ ์„ ์˜๋ฏธํ•œ๋‹ค. 

#include <cstdio>
#include <vector>

using namespace std;
vector<int> a[10];
int main(){
          int n,m;
          scanf("%d %d", &n, &m);
          for(int i=0; i<m; i++){
                int u,v;
                scanf("%d %d", &u, &v);
                a[u].push_back(v);
                a[v].push_back(u);
          }
}

 

 

 

  • ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ)

- pair๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •์ ๊ณผ ๊ฐ€์ค‘์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. 

#include <cstdio>
#include <vector>

using namespace std;
vector<pair<int,int>> a[10];
int main(){
          int n,m;
          scanf("%d %d", &n, &m);
          for(int i=0; i<m; i++){
                int u,v,w;
                scanf("%d %d %d", &u, &v, &w);
                a[u].push_back(make_pair(v,w));
                a[v].push_back(make_pair(u,w));
          }
}

 

 

 

 

 

 

 

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ

 

- ์ธ์ ‘ํ–‰๋ ฌ๊ณผ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ ๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ’€๋ฆฌ๊ธฐ๋•Œ๋ฌธ์— ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ผ์€ ์‚ฌ์‹ค ๋งŽ์ง€ ์•Š๋‹ค. 

- ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค. 

- ๊ฐ„์„ ์„ ๋ชจ๋‘ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. 

- E๋ผ๋Š” ๋ฐฐ์—ด์— ๊ฐ„์„ ์„ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค. 

- O(E)์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. 

 

 

 

- ๊ฐ ๊ฐ„์„ ์˜ ์•ž ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.

                 i   0   1   2   3   4   5  

          cnt[i]  0   2   4   2   4   3  

- ๊ทธ ๋‹ค์Œ์—๋Š” cnt ๋ฐฐ์—ด์„ ์•ž์—์„œ๋ถ€ํ„ฐ ๋ˆ„์ ํ•˜๋ฉด์„œ ๊ตฌํ•œ๋‹ค. cnt[i] = cnt[i-1]+cnt[i]

                 i   0   1   2   3    4    5 

          cnt[i]  0   2   6   8  12  15 

- i๋ฒˆ ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์€ E๋ฐฐ์—ด์—์„œ cnt[i-1]๋ถ€ํ„ฐ cnt[i]-1 ๊นŒ์ง€์ด๋‹ค.

    ์˜ˆ) 3๋ฒˆ ์ •์ : cnt[2] ~ cnt[3] - 1 = 6 ~ 7

 

 

๋‹ค์Œ๊ธ€)

2020/02/29 - [์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ธฐ๋ณธ๊ธฐ ๋‹ค์ง€๊ธฐ] - [์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํƒ์ƒ‰

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํƒ์ƒ‰

์ด์ „๊ธ€ ) 2020/02/29 - [์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ธฐ๋ณธ๊ธฐ ๋‹ค์ง€๊ธฐ] - [์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„ 2. ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ DFS:๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ -> ์ตœ๋Œ€ํ•œ ๊นŠ์ˆ™ํžˆ ๋งŽ์ด BFS:๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ -> ์ตœ๋Œ€ํ•œ ๋„“๊ฒŒ ๊ฐ€๋Š” ๊ฒƒ ๋ชจ๋“ ๊ฐ€..

hyonee.tistory.com

 

 

 

 

 

๋ฐ˜์‘ํ˜•
Comments