알고리즘

[백준/BFS/C++] 1697번 숨바꼭질 *

데메즈 2023. 1. 10. 23:02
728x90
반응형

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

 

1697번: 숨바꼭질

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

#include <bits/stdc++.h>

using namespace std;

const int MAX = 100001;
int n, k;
bool visited[MAX];
int path[MAX];
queue<int> q;

void bfs(int v){
    path[v] = 0;
    visited[v] = true;
    q.push(v);

    while(!q.empty()){
        int w = q.front();
        if(w==k) break;
        q.pop();

        if(visited[w+1]==0 && w+1>=0 && w+1<MAX){
            visited[w+1] =true;
            q.push(w+1);
            path[w+1] = path[w]+1;
        }
        if(visited[w-1]==0 && w-1>=0 && w-1<MAX){
            visited[w-1] = true;
            q.push(w-1);
            path[w-1] = path[w]+1;
        }
        if(visited[w*2]==0 && w*2>=0 && w*2<MAX){
            visited[w*2] = true;
            q.push(w*2);
            path[w*2] = path[w]+1;
        }
    }
}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> k;
    bfs(n);

    cout << path[k];

    return 0;
}
728x90
반응형