题目:http://poj.org/problem?id=3278
题意:从n到m,最少几步。
简单的bfs,刚开始学可以做一下
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=1000010;
bool vis[maxn];
int step[maxn];
int n,m;
queue <int> s;
void bfs(){
s.push(n);
vis[n]=true;
step[n]=0;
while(!s.empty()){
int x=s.front();
if(x==m) return ;
s.pop();
if(x-1>=0&&x-1<maxn&&!vis[x-1]){
step[x-1]=step[x]+1;
vis[x-1]=true;
s.push(x-1);
}
if(x+1>=0&&x+1<maxn&&!vis[x+1]){
step[x+1]=step[x]+1;
vis[x+1]=true;
s.push(x+1);
}
if(2*x>=0&&2*x<maxn&&!vis[2*x]){
step[2*x]=step[x]+1;
vis[2*x]=true;
s.push(2*x);
}
}
}
int main(){
while(~scanf("%d%d",&n,&m)){
memset(vis,false,sizeof(vis));
memset(step,0,sizeof(step));
bfs();
cout<<step[m]<<endl;
}
return 0;
}