POJ 3278 Catch That Cow(简单BFS + 动态方向的设置)
RE了三次,原因是数组越界,解决方法是1、把数组开大些(边界判断条件(1e5)的两倍以上) 2、把数组判断d[v]放在边界判断之后 。 AC代码如下:
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=1e5+10;
int d[maxn];
int N,K;
int dir[]={-1,1,N};
void bfs(){
memset(d,0,sizeof(d));
queue<int>q;
q.push(N);
while(!q.empty()){
int u=q.front();
q.pop();
N=u; //更新N
if(u==K){
printf("%d\n",d[u]);
return ;
}
for(int i=0;i<3;i++){
int v;
if(i<2)v=u+dir[i];
else v=2*N;
if(v>=0&&v<=1e5 && !d[v]){
q.push(v);
d[v]=d[u]+1;
}
}
}
}
int main(){
while(scanf("%d%d",&N,&K)==2){
bfs();
}
return 0;
}
还没有评论,来说两句吧...