๐Ÿ’ป

[๋ฐฑ์ค€] DFS์™€BFS - 1260.DFS์™€ BFS ๋ณธ๋ฌธ

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

[๋ฐฑ์ค€] DFS์™€BFS - 1260.DFS์™€ BFS

๋˜ํšจ๋‹ˆ 2020. 3. 1. 01:26

๋ฌธ์ œ

๊ทธ๋ž˜ํ”„๋ฅผ DFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ์™€ BFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ , ๋” ์ด์ƒ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ข…๋ฃŒํ•œ๋‹ค. ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€์ด๋‹ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ„์„ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— DFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ ๋‹ค์Œ ์ค„์—๋Š” BFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. V๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ๋œ ์ ์„ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

4 5 1
1 2
1 3
1 4
2 4
3 4

 

์˜ˆ์ œ ์ถœ๋ ฅ1

1 2 4 3
1 2 3 4

์˜ˆ์ œ ์ž…๋ ฅ2

5 5 3
5 4
5 2
1 2
3 4
3 1

 

์˜ˆ์ œ ์ถœ๋ ฅ2

3 1 2 5 4
3 1 4 2 5

 

์˜ˆ์ œ ์ž…๋ ฅ3

1000 1 1000
999 1000

 

์˜ˆ์ œ ์ถœ๋ ฅ3

1000 999
1000 999

 

์ƒ๊ฐ

memset์€ ์ดˆ๊ธฐํ™” ํ• ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ธ๋‹ค. dfs๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ visitied[]๊ฐ€ ๋‹ค true๋กœ ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋‹ค์‹œ false๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€๋‹ค. memset์€ cstring์— ์ •์˜๋˜์–ด์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ์ˆซ์ž๊ฐ€ ์ž‘์€ ์ˆœ์„œ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•ด์•ผํ•˜๋ฏ€๋กœ sort()๋ฅผ ์ด์šฉํ•ด์„œ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค. sort๋Š” algorithm์— ์ •์˜๋˜์–ด์žˆ๋‹ค.

 

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

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>

using namespace std;

int n,m,v;
vector<int> graph[1001];
queue<int> q;
bool visited[1001];
void dfs(int node){
    visited[node] = true;
    cout << node << ' ';
    for(int i=0; i<graph[node].size(); i++){
        int next = graph[node][i];
        if(!visited[next]){
            dfs(next);
        }
    }
}
void bfs(int start){
    queue<int> q;
    memset(visited,false,sizeof(visited));
    visited[start] = true;
    q.push(start);
    while(!q.empty()){
        int node = q.front();
        q.pop();
        cout << node << ' ';
        for(int i=0; i<graph[node].size(); i++){
            int next = graph[node][i];
            if(!visited[next]){
                visited[next] = true;
                q.push(next);
            }
        }
    }
}
int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n >> m >> v;
    
    for(int i=0; i<m; i++){
        int a, b;
        cin >> a >> b;
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    for(int i=0; i<=n; i++){
        sort(graph[i].begin(), graph[i].end());
    }
    dfs(v);
    cout << "\n";
    bfs(v);
    
    return 0;
}
๋ฐ˜์‘ํ˜•
Comments