poj 4001 抓住那头牛 (广度优先搜索算法)
来源:互联网 发布:厂家销售软件 编辑:程序博客网 时间:2024/06/06 02:14
- 总时间限制:
- 2000ms
- 内存限制:
- 65536kB
- 描述
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟2、从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?- 输入
- 两个整数,N和K
- 输出
- 一个整数,农夫抓到牛所要花费的最小分钟数
- 样例输入
5 17
- 样例输出
4
因为农夫每次移动的代价都是一样的,而广度优先搜索算法在权值一样时的解即为最佳解,所以此题用广度优先搜索算法就可以解决了。我们可以把农夫的所有状态看成一个三叉树,农夫的初始点为树的根节点,然后依次访问当前节点的三个孩子(+1,-1,*2),每访问一个节点时将该节点放入队列以实现广度优先搜索。最佳解出现时跳出循环,(因为此题必有解所以不同担心广度搜索不收敛的问题)。程序设置一个待访问坐标队列(实现广搜),一个坐标是否访问标志和一个距离数组(每个点到农夫起点的最短距离)具体实现看下面的代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>int queue[100001];int distance[100001];bool flag[100001];int head,tail;void en_queue(int x){ queue[head++]=x;}int de_queue(){ return queue[tail++];}bool empty(){if(head==tail)return true;return false;}int main(){ int N,K,temp;while(scanf("%d%d",&N,&K)!=EOF){head=tail=0;memset(queue,0,sizeof(queue));memset(distance,0,sizeof(distance));memset(flag,0,sizeof(flag)); en_queue(N);flag[N]=true;while(empty()==false){N=de_queue();if(N==K){printf("%d\n",distance[N]);break;} temp=N+1;if(temp<=100000 && flag[temp]==false){flag[temp]=true;distance[temp]=distance[N]+1;en_queue(temp);}temp=N-1;if(temp>=0 && flag[temp]==false){flag[temp]=true;distance[temp]=distance[N]+1;en_queue(temp);}temp=N*2;if(temp<=100000 && flag[temp]==false){flag[temp]=true;distance[temp]=distance[N]+1;en_queue(temp);}}}return 0;}
0 0
- poj 4001 抓住那头牛 (广度优先搜索算法)
- 广度优先搜索--抓住那头牛(poj 3278)
- 广度优先搜索-抓住那头牛(算法基础 第8周)
- 广度优先搜索 入门:抓住那头牛
- C++广度优先搜索算法之抓住那头牛(Catch that cow)
- 广度搜索(BFS)入门题目:抓住那头牛
- [PKU暑课笔记] 广度优先搜索BFS POJ3278抓住那头牛 POJ3984迷宫问题
- 广度优先搜索之入门题目->抓住那只牛
- 广度优先搜索bfs与抓住那头奶牛(Catch that cow, poj3278)
- poj 4001:抓住那头牛
- 【BFS】(一)抓住那头牛(poj 3278)
- poj 3278 bfs(抓住那头牛)
- OpenJudge noi 2971抓住那头牛(POJ 3278)
- 抓住那头牛(POJ NO.2971)
- 算法练习题之抓住那头牛
- 抓住那头牛
- 抓住那头牛
- 抓住那头牛
- ”该硬盘处于脱机.因为他与另一个联机磁盘发生签名冲突“的解决方法,有图有真相
- Ruby Count Array objects if object includes value
- 监听套接字 连接套接字
- 杭电OJ(HDU)-ACMSteps-Chapter Three-《FatMouse' Trade》《今年暑假不AC》《排名》《开门人和关门人》
- Linux常用命令
- poj 4001 抓住那头牛 (广度优先搜索算法)
- Swift 易忽略的笔记 2):String
- openvz 创建
- tomcat下解决 iOS7.1企业应用"无法安装应用程序 因为证书无效"的问题
- linux下eclipse配置jdk
- 机器学习(三)GBDT(Gradient Boosting Decision Tree)迭代决策树
- 操作指定文件格式的10个Perl CPAN模块
- gdb core 调试 - python调用c库
- 组合模式