广度优先搜索 入门:抓住那头牛

来源:互联网 发布:淘宝网狗狗宠物店 编辑:程序博客网 时间:2024/06/06 19:31
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上
,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)
。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要

花多少时间才能抓住牛?


/*Catch_The_Cow.cpp*/#include <iostream>#include <queue>#include <cstring>using namespace std;#define MAX 10000int N;//农夫的位置int K;//牛的位置int visit[MAX+10];//存储节点是否走过的信息struct Step{int x;//哪个点int xx;//经过了几步到这个点Step(int a,int b):x(a),xx(b){}};int main(){cout<<"农夫的位置:"<<endl;    cin>>N;cout<<"牛的位置:"<<endl;cin>>K;memset(visit,0,MAX);//将状态位全部置为零queue<Step> p;//使用队列p.push(Step(N,0));visit[N]=1;while(!p.empty()){Step s=p.front();if(s.x==K){cout<<s.xx<<endl;//输出最少多需要的步骤.system("pause");return 0;}else{if(s.x-1>0&&visit[s.x-1]!=1){p.push(Step(s.x-1,s.xx+1));visit[s.x-1]=1;}if(s.x+1<MAX&&visit[s.x+1]!=1){p.push(Step(s.x+1,s.xx+1));visit[s.xx+1]=1;}if(s.x*2<MAX&&visit[s.x*2]!=1){p.push(Step(s.x*2,s.xx+1));visit[s.x*2]=1;}}p.pop();}system("pause");return 0;}


0 0
原创粉丝点击