#include<stdio.h>#include<iostream>#include<algorithm>#include<string>#include<queue>#include<vector>using namespace std;
int i, j, N,M;
int next1, next2, next3;
int visit[100001];
struct DATA { int cnt; int x; };
int main(){ queue<DATA> block; cin >> N >> M;
DATA d;
d.x = N; d.cnt = 0; block.push(d);
while (!block.empty()) { int x1, cnt1;
x1 = block.front().x; cnt1 = block.front().cnt;
if (x1 == M){ cout << block.front().cnt; return 0; }
next1 = x1 + 1; next2 = x1 - 1; next3 = x1 * 2; visit[x1] = 1;
block.pop();
if (!visit[next1]) { visit[next1] = 1; d.x = next1; d.cnt = cnt1 + 1; block.push(d); } if (!visit[next2]) { visit[next2] = 1; d.x = next2; d.cnt = cnt1 + 1; block.push(d); } if (!visit[next3]) { visit[next3] = 1; d.x = next3; d.cnt = cnt1 + 1; block.push(d); } } return 0; }
댓글을 작성하려면 로그인해야 합니다.
pda_pro12 6년 전
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
using namespace std;
int i, j, N,M;
int next1, next2, next3;
int visit[100001];
struct DATA {
int cnt;
int x;
};
int main()
{
queue<DATA> block;
cin >> N >> M;
DATA d;
d.x = N;
d.cnt = 0;
block.push(d);
while (!block.empty()) {
int x1, cnt1;
x1 = block.front().x;
cnt1 = block.front().cnt;
if (x1 == M){
cout << block.front().cnt;
return 0;
}
next1 = x1 + 1;
next2 = x1 - 1;
next3 = x1 * 2;
visit[x1] = 1;
block.pop();
if (!visit[next1]) {
visit[next1] = 1;
d.x = next1;
d.cnt = cnt1 + 1;
block.push(d);
}
if (!visit[next2]) {
visit[next2] = 1;
d.x = next2;
d.cnt = cnt1 + 1;
block.push(d);
}
if (!visit[next3]) {
visit[next3] = 1;
d.x = next3;
d.cnt = cnt1 + 1;
block.push(d);
}
}
return 0;
}