๐Ÿ’ป

[๋ฐฑ์ค€] DFS์™€BFS - 11403. ๊ฒฝ๋กœ ์ฐพ๊ธฐ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] DFS์™€BFS - 11403. ๊ฒฝ๋กœ ์ฐพ๊ธฐ

๋˜ํšจ๋‹ˆ 2020. 3. 1. 21:47

๋ฌธ์ œ

๊ฐ€์ค‘์น˜ ์—†๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ G๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋“  ์ •์  (i, j)์— ๋Œ€ํ•ด์„œ, i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N (1 ≤ N ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ ์ค„์—๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ธ์ ‘ ํ–‰๋ ฌ์ด ์ฃผ์–ด์ง„๋‹ค. i๋ฒˆ์งธ ์ค„์˜ j๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ 1์ธ ๊ฒฝ์šฐ์—๋Š” i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๊ณ , 0์ธ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค๋Š” ๋œป์ด๋‹ค. i๋ฒˆ์งธ ์ค„์˜ i๋ฒˆ์งธ ์ˆซ์ž๋Š” ํ•ญ์ƒ 0์ด๋‹ค.

 

์ถœ๋ ฅ

์ด N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ธ์ ‘ํ–‰๋ ฌ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ์ •์  i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๊ฐ€ ์žˆ์œผ๋ฉด i๋ฒˆ์งธ ์ค„์˜ j๋ฒˆ์งธ ์ˆซ์ž๋ฅผ 1๋กœ, ์—†์œผ๋ฉด 0์œผ๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

3
0 1 0
0 0 1
1 0 0

 

์˜ˆ์ œ ์ถœ๋ ฅ1

1 1 1
1 1 1
1 1 1

 

์˜ˆ์ œ ์ž…๋ ฅ2

7
0 0 0 1 0 0 0
0 0 0 0 0 0 1
0 0 0 0 0 0 0
0 0 0 0 1 1 0
1 0 0 0 0 0 0
0 0 0 0 0 0 1
0 0 1 0 0 0 0

 

์˜ˆ์ œ ์ถœ๋ ฅ2

1 0 1 1 1 1 1
0 0 1 0 0 0 1
0 0 0 0 0 0 0
1 0 1 1 1 1 1
1 0 1 1 1 1 1
0 0 1 0 0 0 1
0 0 1 0 0 0 0

 

์ƒ๊ฐ

DFS๋กœ ํ‘ธ๋Š” ๊ฒŒ ์ข€ ๋” ์ต์ˆ™ํ•ด์„œ BFS๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค. ์ธ์ ‘ํ–‰๋ ฌ์„ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ์˜€๊ณ , visited๋ฐฐ์—ด์„ ์ด์ฐจ์›๋ฐฐ์—ด๋กœ ๋‘์–ด์„œ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ์ฒดํฌํ•˜๋ ค๊ณ  ํ•˜์˜€๋‹ค. ์ด์ฐจ์›๋ฐฐ์—ด A๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

+) ์ œ์ถœ ํ›„ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ๊ตณ์ด A๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋‘์ง€ ์•Š์•„๋„ visited๋ฐฐ์—ด์„ ์ถœ๋ ฅํ•ด๋„ ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

#include <iostream>
#include <queue>

using namespace std;

int n;
int G[101][101];
int A[101][101];
queue<int> q;
bool visited[101][101];

void bfs(int start){
    queue<int> q;
    q.push(start);
    
    while(!q.empty()){
        int node = q.front();
        q.pop();
        for(int i=0; i<n; i++){
            if(G[node][i]==1 && visited[start][i]==false){
                visited[start][i] = true;
                q.push(i);
                A[start][i] = 1;
            }
        }
    }
}
int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n ;
    
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cin >> G[i][j];
        }
    }
    
    for(int i=0; i<n; i++){
        bfs(i);
    }
    
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            cout << A[i][j] << ' ';
        }
        cout << '\n';
    }
    
    return 0;
}
๋ฐ˜์‘ํ˜•
Comments