CatchThat Cow (BFS)广度优先算法
#include<bits/stdc++.h>
using namespace std;
const int Max=1e5+10;
bool visit[Max];
struct status{
int p;
int t;
status(int a,int b):p(a),t(b){
}
};
void BFS(int n,int k){
queue<status> q;
q.push(status(n,0));
visit[n]=1;
while(!q.empty()){
status current=q.front();
q.pop();
if(current.p==k){
cout<<current.t<<endl;
}
for(int i=0;i<3;i++){
status next=current;
if(i==0){
next.p-=1;
}
else if(i==1){
next.p+=1;
}
else{
next.p*=2;
}
if(next.p<0||next.p>1e5||visit[next.p]){
continue;
}
next.t++;
q.push(next);
visit[next.p]=1;
}
}
return ;
}
int main(){
int n,k;
while(cin>>n>>k){
memset(visit,0,sizeof(visit));
BFS(n,k);
}
return 0;
}
using namespace std;
const int Max=1e5+10;
bool visit[Max];
struct status{
int p;
int t;
status(int a,int b):p(a),t(b){
}
};
void BFS(int n,int k){
queue<status> q;
q.push(status(n,0));
visit[n]=1;
while(!q.empty()){
status current=q.front();
q.pop();
if(current.p==k){
cout<<current.t<<endl;
}
for(int i=0;i<3;i++){
status next=current;
if(i==0){
next.p-=1;
}
else if(i==1){
next.p+=1;
}
else{
next.p*=2;
}
if(next.p<0||next.p>1e5||visit[next.p]){
continue;
}
next.t++;
q.push(next);
visit[next.p]=1;
}
}
return ;
}
int main(){
int n,k;
while(cin>>n>>k){
memset(visit,0,sizeof(visit));
BFS(n,k);
}
return 0;
}