Kuangbin专题 - 简单搜索 -C - Catch That Cow
2018-01-04 18:28
260 查看
这是第一个AC版本,思路是逐层标记,这样就能保证步法是单调枚举下去的。需要注意的是,如果之前已经走过了,就相当于“串回去”了,这种枝需要剪掉,否则bfs是无穷无尽的。
这是第二个版本,把标记改成dpstep数组,可以省去一个交换枚举的队列。
#include <cstdio> #include <queue> #define ck(_a,_x); if(!sgn[_x]&&_x>0&&_x<=100000){_a.push(_x);sgn[_x]=true;} using namespace std; bool sgn[200000]={false}; int bfs(int n,int k){ if(n==k)return 0; queue<int> q[2]; int step=1,tem,t=0; q[0].push(n);sgn =true; for(;;step++,t=!t){ while(!q[t].empty()){ tem=q[t].front();q[t].pop(); if(tem-1==k||tem+1==k||tem*2==k)return step; else{ck(q[!t],tem-1);ck(q[!t],tem+1);ck(q[!t],tem*2);} } } } int main(){ int n,k; scanf("%d%d",&n,&k); printf("%d",bfs(n,k)); }
这是第二个版本,把标记改成dpstep数组,可以省去一个交换枚举的队列。
#include <stdio.h> #define len 66666 int dp[100050]={0},queue[66666]={0},back=0,front=0,ans,n,k,tem; int ck(int a,int b){ if(b==k){ans=dp[a]+1;return 1;} if(b>=0&&b<=100000&&!dp[b]){queue[(back++)%len]=b;dp[b]=dp[a]+1;} return 0; } int main(){ scanf("%d%d",&n,&k); dp =0;queue[back++]=n; for(;;){ tem=queue[(front++)%len]; if(tem==k){ans=dp[tem];break;} if(ck(tem,tem+1)||ck(tem,tem-1)||ck(tem,tem*2))break; } printf("%d",ans); }
相关文章推荐
- [kuangbin带你飞]专题一 简单搜索-C - Catch That Cow POJ - 3278
- [kuangbin带你飞]专题一 简单搜索 - C - Catch That Cow
- [kuangbin带你飞]专题一 简单搜索 C - Catch That Cow poj 3278
- [kuangbin带你飞]专题一 简单搜索 -C - Catch That Cow
- [kuangbin带你飞]专题1 简单搜索 C - Catch That Cow POJ - 3278
- [kuangbin带你飞]专题一 简单搜索C - Catch That Cow(POJ 3278)
- [kuangbin]专题一 简单搜索 C - Catch That Cow
- [kuangbin带你飞]专题一 简单搜索 Catch That Cow : bfs
- [kuangbin带你飞]专题一 简单搜索-C - Catch That Cow
- kuangbin带你飞专题一(搜索)C - Catch That Cow
- POJ 3278 Catch That Cow(kuangbin带你飞 专题一:简单搜索)
- kuangbin专题一:C题,POJ3278:Catch That Cow
- 搜索练习6/poj.org/problem3278 /Catch That Cow/简单的bfs模板
- HDOJ搜索专题之Catch That Cow
- [kuangbin带你飞]专题一 简单搜索 D poj3279
- [kuangbin带你飞]专题一 简单搜索
- [kuangbin带你飞]专题一 简单搜索D - Fliptile(POJ 3279)
- [kuangbin带你飞]专题一 简单搜索 - B - Dungeon Master
- HDU 2717 Catch That Cow (搜索 - BFS)
- kuangbin带你飞]专题一 简单搜索 H