https://www.acmicpc.net/problem/16953
bfs가 단방향으로 한번만 도는 경우, visited가 필요없을 수 있겠구나 하는 생각이 들었다.
#include<iostream>
#include<queue>
using namespace std;
long long int A, B;
//int graph[100000000];
//int visited[100000000];
int cnt;
void bfs(long long int A) {
queue<pair<long long int,long long int>> q;
q.push(make_pair(A,0));
while (!q.empty()) {
long long int curr = q.front().first;
long long int count = q.front().second;
q.pop();
if (curr > B) {
cout << -1;
return;
}
if (curr == B) {
cout << count+1;
return;
}
long long int m1 = curr * 2;
long long int m2 = curr * 10 + 1;
if (m1 <= B) {
q.push(make_pair(m1,count+1));
//visited[m1] = 1;
}
if (m2 <= B ) {
q.push(make_pair(m2, count + 1));
//visited[m2] = 1;
}
}
cout << -1;
}
int main() {
cin >> A >> B;
if (A == B)cout << 0;
bfs(A);
//cout << cnt;
return 0;
}
'코딩테스트_백준풀이' 카테고리의 다른 글
RGB거리 #1149 c++ 풀이 (0) | 2023.11.06 |
---|---|
N과 M 시리즈 ( 순열, 조합, 중복순열, 중복조합 ) (0) | 2023.11.02 |
적록색약 #10026 c++ 풀이 (1) | 2023.11.01 |
단지번호붙이기 #2667 c++ 풀이 (0) | 2023.10.29 |
미로탐색 #2178 c++ 문제풀이 (0) | 2023.10.29 |