hdu2717 Catch That Cow

比较简单的搜索,不过我的内存开得太大了,不知道怎么缩减

一开始内存开得太小了,忘了可能有一步是X*2,所以总数值可能大于100000,所以RE了

#include<iostream>
#include<string>
#include<queue>
using namespace std;
int n,k;
int vis[200002];
struct node
{
	int x,cnt;
	node(int _x=0,int _cnt=0):x(_x),cnt(_cnt){};
};	
queue<node> Q;
void bfs()
{
	memset(vis,0,sizeof(vis));
	node f;
	f.x=n;f.cnt=0;
	while(!Q.empty())
		Q.pop();
	Q.push(f);
	vis[f.x]=1;
	while(!Q.empty())
	{
		node t=Q.front();
		Q.pop();
		if(t.x==k) 
		{
			cout<<t.cnt<<endl;
			return;
		}
		
		if(t.x>k&&!vis[t.x-1])//若t.x>k,则不可能在加1或者乘以2
		{
			Q.push(node(t.x-1,t.cnt+1));
			vis[t.x-1]=1;
			continue;
		}
			if(t.x*3<=2*k)//原形是这样的,t.x*2-k<=k-t.x
			{
				if(!vis[t.x*2])
				{
					Q.push(node(t.x*2,t.cnt+1));
				    vis[t.x*2]=1;
				}
			}
				if(!vis[t.x-1])
				{Q.push(node(t.x-1,t.cnt+1));
				vis[t.x-1]=1;}
				if(!vis[t.x+1])
				{vis[t.x+1]=1;
				Q.push(node(t.x+1,t.cnt+1));}
	   }
}
int main()
{
	while(cin>>n>>k)
	{
		if(n>k)
		{ cout<<n-k<<endl;continue;}
		bfs();
	}
	return 0;
}
posted @ 2011-08-12 00:47  枕边梦  阅读(219)  评论(0编辑  收藏  举报