您的位置:首页 > 其它

POJ 3278 Catch that cow

2015-08-08 16:21 337 查看
题目点我

简单的bfs,但是要剪枝。结果在剪枝数字的问题上RE了一万次,腿都软了。

#include <cstdio>
#include <stdlib.h>
#include <string.h>
#include <queue>
#include <vector>
using namespace std;
#define maxn 200005

int step[maxn];
char vis[maxn];

int bfs(int N, int K){
if(N == K)  return 0;
memset(vis, 'w', sizeof(vis));
queue<int> Q;
Q.push(N);
step
= 0;
vis
= 'g';
while(!Q.empty()){
int x = Q.front();
int now;
Q.pop();
vis[x] = 'b';
if(vis[x - 1] == 'w' && (x - 1 >= 0)){
if(x - 1 == K)
return step[x] + 1;
now = x - 1;
step[now] = step[x] + 1;
Q.push(now);
vis[now] = 'g';
}
if(vis[x + 1] == 'w' && (x + 1 <= maxn/2)){
if(x + 1 == K)
return step[x] + 1;
now = x + 1;
step[now] = step[x] + 1;
Q.push(now);
vis[now] = 'g';
}
if(vis[x * 2] == 'w' && (x * 2 <= maxn/2)){
if(x * 2 == K)
return step[x] + 1;
now = x * 2;
step[now] = step[x] + 1;
Q.push(now);
vis[now] = 'g';
}
}
return -1;
}

int main(){
int N, K;
while(scanf("%d %d", &N, &K) != EOF){
printf("%d\n", bfs(N, K));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: