RT,注释的那段语句,如果那个语句写在for外面就错了,写在for里面就对了,关键是for循环当中根本就没动过head啊?为什么会不一样
P1588 [USACO07OPEN]Catch That Cow S
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005;
int t,fj,cow,Now,Next;
bool vis[MAXN];
int q[MAXN],dis[MAXN];
void bfs(){
int head=0,tail=1;
while(head<=tail){
head++;
//Now=Next=q[head];这句如果写在这里就错了
for(int i=1;i<=3;i++){
Now=Next=q[head];//就这句
switch(i){
case 1:{
Next++;
break;
}
case 2:{
Next--;
break;
}
case 3:{
Next*=2;
break;
}
}
if((Next>=0) && (Next<=100000)){
if((!vis[Next]) || (dis[Next]>(dis[Now]+1))){
tail++;
q[tail]=Next;
vis[Next]=1;
dis[Next]=dis[Now]+1;
}
}
}
}
}
int main(){
cin>>t;
while(t--){
memset(vis,0,sizeof(vis));
memset(q,0,sizeof(q));
memset(dis,0,sizeof(dis));
cin>>fj>>cow;
vis[fj]=1;
q[1]=fj;
bfs();
cout<<dis[cow]<<endl;
}
return 0;
}