一维数组上的BFS 下一个状态点分别是 x-1, x + 1, 2 * x. x-1 之后需要判断是否小于0来剪枝
Source Code
Problem: 3278 User: fisty
Memory: 1512K Time: 47MS
Language: G++ Result: Accepted
Source Code
#include <cstdio>
#include <string>
#include <queue>
using namespace std;
int s,g;
#define MAX_N 200030
#define INF 0xffff
int dx[2] = {-1, 1};
int d[MAX_N];
void solve(){
queue<int> que;
fill(d, d + MAX_N, INF);
que.push(s);
d[s] = 0;
while(que.size()){
int x = que.front(); que.pop();
if(x == g) break;
for(int i = 0;i < 3; i++){
int nx;
if(i == 2){
nx = x*2;
}else{
nx = x + dx[i];
}
if(nx > MAX_N || nx < 0) continue;
if(d[nx] == INF ){
que.push(nx);
d[nx] = d[x] + 1;
}
}
}
printf("%d\n", d[g]);
}
int main(){
while(scanf("%d%d", &s, &g) != EOF){
solve();
}
return 0;
}