[๋ฐฑ์ค€] 1260 DFS์™€ BFS - dfs, bfs

2024. 8. 20. 16:58ยท๐Ÿ’ป Algorithms/๋ฐฑ์ค€

[ ๋ฌธ์ œ๋งํฌ ]

https://www.acmicpc.net/problem/1260

 

๐Ÿšฉ ์กฐ๊ฑด

  1. ๊ทธ๋ž˜ํ”„๋ฅผ DFS, BFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๊ฐ ์ถœ๋ ฅํ•ด๋ผ.
  2. ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ด๋ฉด ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•ด์•ผ ํ•จ
  3. ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000)
  4. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ

 

 

๐Ÿšฉ ์ ‘๊ทผ

2 -> ์ž…๋ ฅ์„ ๋ชจ๋‘ ์ €์žฅํ•œ ํ›„ sort ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ

DFS -> stack

BFS -> queue

 

 

๐Ÿšฉ ์‹œํ–‰์ฐฉ์˜ค

  • memset(์‹œ์ž‘ ํฌ์ธํ„ฐ, ์„ค์ •ํ•  ๊ฐ’, ํฌ๊ธฐ) : cstring ํ—ค๋”ํŒŒ์ผ ํ•„์š”
    • ex. memset(visit, false, sizeof(visit))

 

ใ…Ž..

  • ์ปดํŒŒ์ผ ์—๋Ÿฌ - sort ํ•จ์ˆ˜ ์‚ฌ์šฉ์‹œ algorithm ํ—ค๋”ํŒŒ์ผ ํ•„์š”, bool์„ boolean์œผ๋กœ ์˜คํƒ€
  • ์ปดํŒŒ์ผ ์—๋Ÿฌ(Segfault) - v[0]์€ ๋ฒ„๋ฆฌ๋Š” vector์—ฌ์„œ ๋น„์–ด์žˆ๋Š”๋ฐ for๋ฌธ์—์„œ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•จ
  • ์‹œ๊ฐ„์ดˆ๊ณผ - bfs ๊ตฌํ˜„์‹œ ์ผ๋‹จ ๋‹ค pushํ•œ ํ›„ visit๊ณผ ๋น„๊ตํ•˜๋ฉฐ pop/์žฌ๊ท€ํ•˜๋„๋ก ํ–ˆ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์—ฌ push ์ „ visit ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋„๋ก ์ˆ˜์ •. ๊ทธ๋ฆฌ๊ณ  queue.front()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ ๋ฐ˜๋“œ์‹œ empty ์—ฌ๋ถ€ ํ™•์ธํ•ด์•ผํ•จ.(๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ๋‚˜์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋“ฏ)
  • ์ถœ๋ ฅ ํ˜•์‹ ๋ฌธ์ œ - ์ถœ๋ ฅ ๋งˆ์ง€๋ง‰์— ๊ณต๋ฐฑ/์ค„๋ฐ”๊ฟˆ ์žˆ์–ด๋„ ์ƒ๊ด€ ์—†์Œ but ์—†์œผ๋ฉด ์ƒ๊ด€์žˆ๋‚˜๋ด

 

 

๐Ÿ’ป ์ฝ”๋“œ (C++)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;

vector<int> v[1001];    // ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ„์„  ์ €์žฅ
bool visit[1001];
queue<int> q;

void dfs(int start){
    cout<<start<<" ";
    visit[start] = true;
    for(int i=0;i<v[start].size();i++){
        int next = v[start][i];
        if(visit[next]) continue;
        dfs(next);
    }
}

void bfs(int start){
    cout<<start<<" ";
    visit[start] = true;
    for(int i=0;i<v[start].size();i++){
        int next = v[start][i];
        if(visit[next]) continue;
        q.push(next);
    }
    while(!q.empty() && visit[q.front()]){
        q.pop();
    }
    
    if(!q.empty())
        bfs(q.front());
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    int N,M,V,a,b;
    cin>>N>>M>>V;
    for(int i=0;i<M;i++){
        cin>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    for(int i=1;i<=N;i++){
        sort(v[i].begin(), v[i].end());
    }
    
    dfs(V);
    memset(visit, false, sizeof(visit));
    cout<<"\n";
    bfs(V);
}

'๐Ÿ’ป Algorithms > ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€] 10814 ๋‚˜์ด์ˆœ ์ •๋ ฌ - ์ •๋ ฌ  (0) 2024.08.24
[๋ฐฑ์ค€] 5397 ํ‚ค๋กœ๊ฑฐ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ  (0) 2024.08.24
[๋ฐฑ์ค€] 2164 ์นด๋“œ2 - ํ  (0) 2024.08.19
[๋ฐฑ์ค€] 1992 ์ฟผ๋“œํŠธ๋ฆฌ - ์žฌ๊ท€ํ•จ์ˆ˜  (0) 2024.08.19
[๋ฐฑ์ค€] 11403 ๊ฒฝ๋กœ ์ฐพ๊ธฐ - ๊ทธ๋ž˜ํ”„, DFS  (0) 2024.08.17
'๐Ÿ’ป Algorithms/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐฑ์ค€] 10814 ๋‚˜์ด์ˆœ ์ •๋ ฌ - ์ •๋ ฌ
  • [๋ฐฑ์ค€] 5397 ํ‚ค๋กœ๊ฑฐ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
  • [๋ฐฑ์ค€] 2164 ์นด๋“œ2 - ํ
  • [๋ฐฑ์ค€] 1992 ์ฟผ๋“œํŠธ๋ฆฌ - ์žฌ๊ท€ํ•จ์ˆ˜
์ ๋„
์ ๋„
  • ์ ๋„
    ๋„์ 
    ์ ๋„
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (30)
      • ๐Ÿ’ป Algorithms (28)
        • ๋ฐฑ์ค€ (22)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
      • ๐Ÿ”Ž Deep Learning (0)
      • ๐Ÿ’ฅ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… (1)
      • ๐Ÿ•น Unity (1)
      • ๐Ÿฅ” ์ž‰ํ…… (0)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • Blog
    • Github
    • Velog
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
์ ๋„
[๋ฐฑ์ค€] 1260 DFS์™€ BFS - dfs, bfs
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”