문제
설명
나는 이문제에서 다음과 같은 사항으로 인해 정말 많이 고생하였다
위 아래가 결과가 다르다.
위에는 맞게 출력되고 밑에 것은 런타임 에러가 뜬다.
이유는 p가 50001일 경우 p곱하기2는 범위를 넘어가는데 arr[p곱하기2]==0 에서 arr을 확인하려 했다가 값이 없어 런타임 에러가 뜬다.
코드
#include <queue>
#include <iostream>
using namespace std;
int arr[100001] = {0,};
int n,k;
queue <int>q;
int bfs()
{
q.push(n);
arr[n]=1;
while (!q.empty()) {
int p=q.front();
q.pop();
if(p==k){
return(arr[p]-1);
}
if (p-1>=0&&arr[p-1]==0) {
arr[p-1]=arr[p]+1;
q.push(p-1);
}
if (arr[p + 1] == 0&& p<100000) {
arr[p+1]=arr[p]+1;
q.push(p+1);
}
if ((p * 2 <= 100000)&& (arr[p*2]==0)) {
arr[p*2]=arr[p]+1;
q.push(p*2);
}
}
}
int main() {
cin >> n >> k;
cout << bfs();
}
'알고리즘 > BFS' 카테고리의 다른 글
[C++][백준 14226번][백준 이모티콘][bfs][dp] (0) | 2019.02.10 |
---|