Catch That Cow (BFS)
来源:互联网 发布:微信js sdk 编辑:程序博客网 时间:2024/06/05 21:08
抓住那头牛!!!
在一条数轴上有一个农民和他的一头牛,cow奶牛;农民要抓住牛,现在农民有三种移动方式:
1.x->x+1耗时一分钟;
2.x->x-1耗时一分钟;
3.第三种比较吊了,瞬移,x->2x耗时一分钟;
以上x代表农民所在坐标;
问:农民至少需要多长时间能抓住牛?
这个问题用广搜比较好,深搜会超时,那什么是广搜?
广搜就是一层层扩展,对于所到达的每个位置计算出下一步能到达的所有位置,一层层扩展,直到找到目标;
用数组模拟队列储存每一步到达的坐标和所需步数,这就用到了结构体;
下面直接上代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>struct node{ //定义一个结构体,包含该点的坐标,和到达该点的步数(分钟); int x; int step;}q[100005],temp;int head=0, tail=1; // 定义队列的头和尾;int book[100005]; //用来标记该点是否走过;int main(){ int N, K; //N是农民所在位置,K是cow所在位置; scanf("%d%d",&N,&K); q[head].x=N; q[head].step=0; //先把起点放入队列; book[N]=1; //标记起点; int i; while(head<tail) //到队列为空时循环结束,当然该题一定会抓到cow,所以不会空; { if(q[head].x==K) //如果第一步就到达K,直接循环结束; break; int i, tx, s, flag=0; for(i=1; i<=3; i++) //下一步直接到达的有三种情况; { if(i==1) //第一种情况; tx=q[head].x+1; else if(i==2) //第二种情况; tx=q[head].x-1; else //第三种情况; tx=q[head].x*2; if(!book[tx] && tx>=0 && tx<=100000) //if 该点没有走过,并且不越界,放入队列; { book[tx]=1; //标记; q[tail].x=tx; q[tail].step=q[head].step+1; tail++; } if(tx==K) //if 到达该点停止; { flag=1; break; } } if(flag) //if flag==1,说明已经找到cow,循环停止; break; head++; //队首出队,再扩展下一个; } printf("%d\n",q[tail-1].step); //队尾一直保持空,所以输出前一个; return 0;}
阅读全文
0 0
- Catch That Cow(BFS)
- Catch That Cow(BFS)
- Catch That Cow (BFS)
- Catch That Cow (BFS)
- Catch That Cow(BFS)
- Catch That Cow(bfs)
- Catch That Cow+BFS
- Catch That Cow BFS
- Catch That Cow BFS
- Catch That Cow(BFS)
- Catch That Cow BFS
- Catch That Cow (BFS)
- Catch That Cow【bfs】
- Catch That Cow(bfs)
- Catch That Cow BFS
- bfs-catch that cow
- Catch That Cow(bfs)
- Catch That Cow bfs
- 创建线程的三种方式总结
- eclipse从Git获取项目更新
- python实现str时间和系统时间的比较
- FileInputStream介绍和对文件操作的具体用法
- android音频系统之AudioTrack的使用
- Catch That Cow (BFS)
- Unix BSD Socket编程Xcode实践
- 斐波那契数列
- [HDU]-6034 Balala Power!
- ELK搭建实时日志分析平台
- JDK源码分析——TimSort
- [HAOI2008]圆上的整点
- c++中虚基类表和虚函数表的布局
- PHP实现采集抓取淘宝网单个商品信息