8.罐子(简单搜索 BFS最短步数+记录方案)
1.1.棋盘问题(简单搜索 DFS)2.2.地牢大师(简单搜索 三维BFS)3.3.抓住那头牛(简单搜索 一维BFS)4.4.翻转(简单搜索 枚举)5.5.找倍数(简单搜索 BFS)6.6.质数路径(简单搜索 BFS)7.7.洗牌(简单搜索 BFS)
8.8.罐子(简单搜索 BFS最短步数+记录方案)
9.9.点火游戏(简单搜索 BFS)10.10.起火迷宫(简单搜索 多源BFS)11.11.迷宫问题(简单搜索 BFS 储存路径)12.12.石油储备(简单搜索 DFS/BFS 统计连通块个数)13.13.非常可乐(简单搜索 BFS)14.14.找路(简单搜索 BFS 最短步数)15.1.八数码 (搜索进阶 BFS)16.2.八数码II(搜索进阶 IDA*估价函数 + 迭代加深)罐子
↑ 题目链接
题目
给你两个罐子,容积分别为
现在,你可以进行如下三种操作:
FILL(i)
,将罐子
DROP(i)
,将罐子
POUR(i,j)
,将罐子
请问,至少多少次操作后,可以使得其中一个罐子里恰好有
输入格式
共一行,三个整数 A,B,C。
输出格式
如果无解,则输出一行 impossible
即可。
否则,第一行输出一个整数,表示最少操作次数。
随后按顺序每行输出一个操作指令,格式参考题面。
数据范围
输入样例:
3 5 4
输出样例:
6
FILL(2)
POUR(2,1)
DROP(1)
POUR(2,1)
FILL(2)
POUR(2,1)
思路
通过
代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
string op[]={"FILL(1)","FILL(2)","DROP(1)","DROP(2)","POUR(1,2)","POUR(2,1)"};
int d[N][N];
int A,B,C;
struct Pos
{
int x,y;
string s;
};
void bfs()
{
memset(d,-1,sizeof d);
queue<Pos>q;
q.push({0,0,""});
d[0][0]=0;
while(q.size())
{
auto t=q.front();
q.pop();
if(t.x==C||t.y==C)
{
cout<<d[t.x][t.y]<<endl;//最少步数
for(auto x:t.s)//输出方案
{
cout<<op[x-'0']<<endl;
}
return;
}
int minx=min(t.x,B-t.y);
int miny=min(A-t.x,t.y);
//6种状态
int dx[]={A,t.x,0,t.x,t.x-minx,t.x+miny};
int dy[]={t.y,B,t.y,0,t.y+minx,t.y-miny};
for(int i=0;i<6;i++)
{
int a=dx[i],b=dy[i];
if(d[a][b]==-1)
{
d[a][b]=d[t.x][t.y]+1;
q.push({a,b,t.s+to_string(i)});
}
}
}
puts("impossible");
}
int main()
{
cin>>A>>B>>C;
bfs();
return 0;
}
本文来自博客园,作者:风雨zzm,转载请注明原文链接:https://www.cnblogs.com/zzmxj/p/17367489.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)