-
백준 13913 어렵지 않지만 계속 런타임 에러난다old/Algorithm 2020. 5. 18. 22:23728x90
// https://www.acmicpc.net/problem/13913 #include<iostream> #include<queue> using namespace std; int n; int k; int check[200001]; // 깊이 저장?? int from[200001]; int arr[200001]; void track(int last){ arr[0] = last; int next = from[last]; int i = 1; while(next != -1){ // cout << next << " "; arr[i] = next; next= from[next]; i++; } // cout << i; for(int k = i -1; k >=0; k--){ cout << arr[k] << " "; } } void bfs(){ int step = 0; queue<int> q; for(int i = 0; i < 200001; i++){ check[i] = -1; } check[n] = 0; // from[n] = -1; if(n+1 < 200001){ check[n+1] = 1; from[n+1] = n; q.push(n+1); } if(n-1 >= 0){ check[n-1] = 1; from[n-1] = n; q.push(n-1); } if(n*2 < 200001){ check[n*2] = 1; from[n*2] = n; q.push(n*2); } while(!q.empty()){ int nn = q.front(); q.pop(); if(nn == k){ cout<< check[nn] <<"\n"; track(k); break; } if(nn +1 < 200001 && check[nn +1 ] == -1){ check[nn + 1] = check[nn] + 1; from[nn + 1] = nn; q.push(nn + 1); } if(nn - 1 >= 0 && check[nn - 1] == -1){ check[nn - 1] = check[nn] + 1; from[nn - 1] = nn; q.push(nn-1); } if(nn * 2 < 200001 && check[nn * 2] == -1){ check[nn * 2] = check[nn] + 1; from[nn * 2] = nn; q.push(nn * 2); } } } int main(){ cin >> n >> k; bfs(); return 0; }
숨박꼭질 경로 구하는건데, 뭔가 지금 너무 졸려서 그런건지
범위가 넘 애매한것같이 느껴진다. 계속 런타임 에러가 나는데, 정말 어디서 문제가 난건지 알수가없다. n만 저 범위면 되는건지, 백준 저지 답은 200000사이로 해뒀던데, 꼭 그렇게 되야할 이유가 있는지 의문이다. 계속 런타임에러가 났던거보면 이문제때문이었던 것 같기도한데, 아예 나중에 맨정신으로 풀어야겠다.
'old > Algorithm' 카테고리의 다른 글
2주차 6월8일 - 6월14일 (0) 2020.06.07 1주차 6월 1일 - 6월7일 (0) 2020.05.31 7453번 - 합이 0인 네 정수 (0) 2020.05.02 백준 2143번 풀이 (0) 2020.05.02 백준 1208, 부분 수열의 합 (0) 2020.05.02