https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
쉽네요.
그리드 문제라는데 솔직히 BFS 문제같네요.
#include <iostream>
#include <vector>
#include <queue>
#include<string>
#include<algorithm>
#include<cmath>
#include<unordered_map>
#include<map>
using namespace std;
struct Point {
int i, j, t, cnt;
char c;
};
void Prints(vector<vector<int>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j];
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<bool>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j];
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<char>>maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[i][j];
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<vector<char>>>maps, int n, int m, int k) {
for (int t = 0; t < k; t++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[t][i][j];
}
cout << endl;
}
cout << endl;
}
cout << endl;
}
void Prints(vector<vector<vector<bool>>>maps, int n, int m, int k) {
for (int t = 0; t < k; t++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << maps[t][i][j];
}
cout << endl;
}
cout << endl;
}
cout << endl;
}
struct Data {
long index;
int cnt;
};
struct Word {
std::string word;
int count;
};
int main() {
long A;
long B;
cin >> A >> B;
Data d;
d.index = A;
d.cnt = 1;
queue<Data>q;
q.push(d);
long da = B - A;
//cout << da;
vector<bool>bVisited(B,false);
if (A == B) {
cout << 0;
return 0;
}
bool bEnd = false;
while (!q.empty()) {
Data start = q.front();
q.pop();
long dirx=0;
//int dirp=0;
long end = B;
if (bEnd == true) {
//cout << start.cnt+1 ;
break;
}
for (int i = 0; i < 2; i++) {
if (i == 0) {
//x2
dirx = start.index * 2;
}
else if (i == 1) {
//+1
//dirx
string tmp= to_string(start.index);
tmp = tmp + "1";
dirx = stol(tmp);
}
if (dirx ==B ) {
cout << start.cnt + 1;
bEnd = true;
i = 2;
continue;
}
if (dirx >= B) {
continue;
}
if (bVisited[dirx] == false) {
bVisited[dirx] = true;
Data tmpD;
tmpD.index = dirx;
tmpD.cnt = start.cnt + 1;
q.push(tmpD);
}
}
}
if (bEnd == false) {
cout<<-1;
}
return 0;
}