您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: