hdu 2717&&pku3278 Catch That Cow
2010-08-11 23:04
375 查看
题意:农夫找丢失的牛,x->x-1,x->x+1,x->2*x三种走法,牛不动,求最短的时间找到牛,用bfs。
#include<iostream>
#include<queue>
using namespace std;
#define size 100005
int tag[size];
void bfs(int n,int k)
{
if(n==k)
{
cout<<tag
<<endl;
return;
}
int i;
queue<int>que;
memset(tag,0,sizeof(tag));
que.push(n);
tag
=0;
while(!que.empty())
{
i=que.front();que.pop();
if(i==k)
{
cout<<tag[k]<<endl;
break;
}
if(i+1<=100000&&tag[i+1]==0)
{
tag[i+1]=tag[i]+1;
que.push(i+1);
}
if(i-1>=0&&tag[i-1]==0)
{
tag[i-1]=tag[i]+1;
que.push(i-1);
}
if(2*i<=100000&&tag[2*i]==0)
{
tag[2*i]=tag[i]+1;
que.push(2*i);
}
int m=que.front();
}
return ;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
bfs(n,k);
}
return 0;
}
//刚刚又写了一个,呵呵,其实差不多,就是想练练手。。在杭电都是31ms
#include<iostream>
#include<queue>
using namespace std;
#define size 100005
bool tag[size];
typedef struct
{
int x;
int step;
}Node;
void bfs(int n,int k)
{
int step,x,ans=0;
if(n==k)
{
cout<<"0"<<endl;
return;
}
Node cur,next;
queue<Node>que;
cur.x=n;
cur.step=0;
memset(tag,0,sizeof(tag));
tag
=1;
que.push(cur);
while(!tag[k])
{
cur=que.front();
que.pop();
x=cur.x;
step=cur.step;
if(x-1>=0&&tag[x-1]==0)
{
tag[x-1]=1;
cur.x=x-1;
cur.step=step+1;
que.push(cur);
if(cur.x==k)
{
ans=step+1;
break;
}
}
if(x+1<=100000&&tag[x+1]==0)
{
tag[x+1]=1;
cur.x=x+1;
cur.step=step+1;
que.push(cur);
if(cur.x==k)
{
ans=step+1;
break;
}
}
if(x*2<=100000&&tag[2*x]==0)
{
tag[x*2]=1;
cur.x=2*x;
cur.step=step+1;
que.push(cur);
if(cur.x==k)
{
ans=step+1;
break;
}
}
}
cout<<ans<<endl;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
bfs(n,k);
}
return 0;
}
#include<iostream>
#include<queue>
using namespace std;
#define size 100005
int tag[size];
void bfs(int n,int k)
{
if(n==k)
{
cout<<tag
<<endl;
return;
}
int i;
queue<int>que;
memset(tag,0,sizeof(tag));
que.push(n);
tag
=0;
while(!que.empty())
{
i=que.front();que.pop();
if(i==k)
{
cout<<tag[k]<<endl;
break;
}
if(i+1<=100000&&tag[i+1]==0)
{
tag[i+1]=tag[i]+1;
que.push(i+1);
}
if(i-1>=0&&tag[i-1]==0)
{
tag[i-1]=tag[i]+1;
que.push(i-1);
}
if(2*i<=100000&&tag[2*i]==0)
{
tag[2*i]=tag[i]+1;
que.push(2*i);
}
int m=que.front();
}
return ;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
bfs(n,k);
}
return 0;
}
//刚刚又写了一个,呵呵,其实差不多,就是想练练手。。在杭电都是31ms
#include<iostream>
#include<queue>
using namespace std;
#define size 100005
bool tag[size];
typedef struct
{
int x;
int step;
}Node;
void bfs(int n,int k)
{
int step,x,ans=0;
if(n==k)
{
cout<<"0"<<endl;
return;
}
Node cur,next;
queue<Node>que;
cur.x=n;
cur.step=0;
memset(tag,0,sizeof(tag));
tag
=1;
que.push(cur);
while(!tag[k])
{
cur=que.front();
que.pop();
x=cur.x;
step=cur.step;
if(x-1>=0&&tag[x-1]==0)
{
tag[x-1]=1;
cur.x=x-1;
cur.step=step+1;
que.push(cur);
if(cur.x==k)
{
ans=step+1;
break;
}
}
if(x+1<=100000&&tag[x+1]==0)
{
tag[x+1]=1;
cur.x=x+1;
cur.step=step+1;
que.push(cur);
if(cur.x==k)
{
ans=step+1;
break;
}
}
if(x*2<=100000&&tag[2*x]==0)
{
tag[x*2]=1;
cur.x=2*x;
cur.step=step+1;
que.push(cur);
if(cur.x==k)
{
ans=step+1;
break;
}
}
}
cout<<ans<<endl;
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
bfs(n,k);
}
return 0;
}
相关文章推荐
- HDU 2717&&poj 3278 Catch That Cow
- hdu 2717 && poj 3278 Catch That Cow
- POJ 3278 && HDU 2717 Catch That Cow(bfs)
- pku 3278 Catch That Cow(广搜)
- poj 3278(hdu 2717) Catch That Cow(bfs)
- PKU 3278 Catch That Cow
- HDU 3278 Catch That Cow(简单bfs)
- HDOJ&nbsp;&nbsp;2717&nbsp;&nbsp;&nbsp;Catch&nbsp;That&nbsp;Cow
- pku 3278 Catch That Cow BFS
- pku 3278 Catch That Cow---BFS
- poj 3278 && bzoj 1646: [Usaco2007 Open]Catch That Cow 抓住那只牛(BFS)
- 【poj 3278】Catch That Cow 题意&题解&代码(C++)
- hdu 2717 (poj 3278)Catch That Cow
- PKU 3278 Catch That Cow
- PKU3278 Catch That Cow 基础广搜
- [POJ_3278]Catch That Cow
- Catch that cow(POJ_3278)
- pku--3278 catch the cow(*2 +1 -1 顺序抓补)
- poj 3278 Catch That Cow
- POJ 3278 Catch That Cow 【bfs+队列】