POJ 1945 Power Hungry Cows G++ bfs 巧妙 简洁 背

#include <iostream>
#include <queue>
#include <utility>
#include <cstdio>
using namespace std;
//英语  看博友分析 抄博友程序  bfs 巧妙  简洁  背 
int vis[20300][150];
int n;
struct nod{
	int num1;
	int num2;
	int step;
};
queue<nod> que;
bool add(int num1, int num2, int step)
{
	if(num1==n || num2==n)
	{
		return true;
	}
	if(num1<num2)
	{
		swap(num1,num2);
	}
	if(num1==num2 || num1>n+105 ||num2>105)//背  不加后两个条件运行时错误 
	{
		return false;
	}
	if(vis[num1][num2]==0)
	{
		vis[num1][num2]=1;
		que.push((nod){num1,num2,step});
	}
	return false;
}
int main()
{
	cin>>n;
	add(1,0,0);
	while(que.empty()!=1)
	{
		nod t=que.front();
		que.pop();
		int num1=t.num1;
		int num2=t.num2;
		int step=t.step;
		if(add(num1+num1,num2,step+1)||add(num1+num1,num1,step+1)||add(num2+num2,num1,step+1)||(add(num2+num2,num2,step+1)||//背 
		add(num1+num2,num1,step+1)||add(num1+num2,num2,step+1)
		||add(num1-num2,num1,step+1)||add(num1-num2,num2,step+1)))
		{
			printf("%d\n",step+1); 
			break;
		} 
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值