Catch That Cow(捉住那头牛)
2011-09-04 10:31
218 查看
poj 3278
题目大意:给出坐标中人的位置和牛的位置,然后牛不动,让你按照给定的策略(走一秒,退一退,走二倍当前的时间)去到牛的身边,求最小步子数
解决:DFS,分析若一开始牛在人的身后,只有往后退的份了,所以加一个判断条件最好
题目大意:给出坐标中人的位置和牛的位置,然后牛不动,让你按照给定的策略(走一秒,退一退,走二倍当前的时间)去到牛的身边,求最小步子数
解决:DFS,分析若一开始牛在人的身后,只有往后退的份了,所以加一个判断条件最好
#include <iostream> #include <queue> using namespace std; int n,k; struct node { int pos,step; node(int p,int s){pos=p;step=s;} node(){} }; bool inq[200005]; int bfs() { node t; queue<node> q; q.push( node(n,0) ); inq =1; while( !q.empty() ) { t = q.front(); q.pop(); //首先判断扩展出的新节点有没有符合要求的 ,即有没到牛身边了 if(t.pos+1 == k || t.pos-1 == k || t.pos*2 == k)return t.step+1; //没有的时候,就剪枝入队 if(t.pos + 1 < k && !inq[t.pos + 1] ) { inq[t.pos + 1]=1; q.push( node(t.pos+1,t.step+1) ); } if( t.pos -1 >=0 && !inq[t.pos - 1] ) { inq[t.pos - 1]=1; q.push( node(t.pos - 1,t.step+1) ); } if( t.pos * 2 < 2 * k && !inq[ t.pos * 2 ]) { inq[t.pos * 2]=1; q.push( node(t.pos * 2,t.step+1 )); } } } int main() { //题目中没说多组测试数据可以按照一组处理 cin>>n>>k; //首先判断牛与人的位置 if(n >= k)cout<<n-k<<endl; else cout<<bfs()<<endl; system( "pause" ); return 0; }
相关文章推荐
- C++广度优先搜索算法之抓住那头牛(Catch that cow)
- 广度优先搜索bfs与抓住那头奶牛(Catch that cow, poj3278)
- Catch That Cow(抓住那头牛)
- OpenJudge 2.5-2971 Catch That Cow(抓住那头牛)
- Catch That Cow 寻找那头牛
- POJ 3278:Catch That Cow 抓住那头牛
- poj Catch That Cow(BFS)
- POJ-3278-Catch That Cow[基础BFS]
- Catch That Cow(队列)
- hdu 2717 (poj 3278)Catch That Cow
- poj 3278 Catch That Cow(BFS,剪枝)
- POJ 3248 Catch That Cow
- POJ 3278 Catch That Cow(BFS 剪枝)
- POJ3278 Catch That Cow(BFS)
- POJ3278,Catch That Cow
- POJ.3278 Catch That Cow (BFS)
- poj 3278 Catch That Cow
- hdu2717:Catch That Cow
- Hrbust-1012-Catch That Cow(广搜BFS入门)
- 模板题之广度搜索 HDU2717 Catch That Cow