HDU----1495(BFS问题)

本文介绍了HDU 1495题目,重点探讨了解决该问题的BFS(广度优先搜索)算法。通过代码展示,详细解释了如何运用BFS策略来求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接
非常可乐

代码如下

#include<bits/stdc++.h>
using namespace std;
const int M = 105;
int s,n,m;
struct cup
{
	int v[5];
	int step;
}temp;
int vis[M][M][M],v[5];
void pour(int a,int b)
{
	int sum = temp.v[a]+temp.v[b];
	if(sum>=v[b]) temp.v[b] = v[b];
	else temp.v[b] = sum;
	temp.v[a] = sum-temp.v[b];
}
void bfs()
{
	int i,j;
	queue<cup>q;
	cup cnt;cnt.v[1] = v[1];
	cnt.v[2] = 0;
	cnt.v[3] = 0;
	cnt.step = 0;
	q.push(cnt);memset(vis,0,sizeof vis);
	vis[v[1]][0][0] = 1;
	while(!q.empty())
	{
		cnt = q.front();q.pop();
		if(cnt.v[1]==cnt.v[3]&&cnt.v[2]==0)
		{
			printf("%d\n",cnt.step);
			return ;
		}
		for(i = 1;i<=3;i++)
		{
			for(j = 1;j<=3;j++)
			{
				if(i!=j)
				{
					temp = cnt;pour(i,j);
					if(!vis[temp.v[1]][temp.v[2]][temp.v[3]])
					{
						temp.step++;q.push(temp);
						vis[temp.v[1]][temp.v[2]][temp.v[3]] = 1;
					}
				}
			}
		}}
	printf("NO\n");
}
int main ()
{
	while(~scanf("%d%d%d",&v[1],&v[2],&v[3]))
	{
		if(v[1]==0&&v[2]==0&&v[3]==0) 
		break;
		if(v[2]>v[3])
		{
			int t = v[2];v[2] = v[3];v[3] = t;
		}
		bfs();
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值