大致题意:
在一个坐标轴上,农夫在N点,牛在K点(假设在整个过程中牛静止不动),现在农夫可以 +1, -1, *2 的步数,问抓到牛的最小步数
采用STL的queue 第一次使用。。。
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
int N, K;
const int MAXN=100000;
int visited[MAXN+10];
struct Step
{
int x;
int steps;
Step(int xx, int s):x(xx),steps(s){}
};
queue <Step> q;
int main()
{
cin >> N >> K;
memset(visited, 0, sizeof(visited));
q.push(Step(N, 0));
visited[N] = 1;
while( !q.empty())
{
Step s=q.front();
if( s.x == K)
{
cout << s.steps << endl;
return 0;
}
else
{
if( s.x-1>=0 && !visited[s.x-1])
{
q.push(Step(s.x-1, s.steps+1));
visited[s.x-1] = 1;
}
if( s.x+1<=MAXN && !visited[s.x+1])
{
q.push(Step(s.x+1, s.steps+1));
visited[s.x+1] = 1;
}
if( s.x*2<=MAXN && !visited[s.x*2])
{
q.push(Step(s.x*2, s.steps+1));
visited[s.x*2] = 1;
}
q.pop();
}
}
return 0;
}