POJ-3278-Catch That Cow

比较简单的BFS题,注意边界越界问题即可。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
const int maxn=1e6;
bool vis[maxn];
struct node
{
    int val;
    int step;
};
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
	memset(vis,0,sizeof(vis));
	queue<node> q;
	node ita;
	ita.val=n;
	ita.step=0;
	q.push(ita);
	vis[n]=1;
	int ans=-1;
	while(!q.empty())
	{
	    ita=q.front();
	    if(ita.val==m)
	    {
		ans=ita.step;
		break;
	    }
	    q.pop();
	    node itb;
	    itb.step=ita.step+1;
	    if(!vis[ita.val+1])
	    {
		itb.val=ita.val+1;
		q.push(itb);
		vis[itb.val]=1;
	    }
	    if(ita.val-1>=0&&!vis[ita.val-1])
	    {
		itb.val=ita.val-1;
		q.push(itb);
		vis[itb.val]=1;
	    }
	    if(ita.val*2<maxn&&!vis[ita.val*2])
	    {
		itb.val=ita.val*2;
		q.push(itb);
		vis[itb.val]=1;
	    }
	}
	printf("%d\n",ans);
    }
	    
    return 0;
}



你可能感兴趣的:(bfs)