广度优先搜索 cdoevs 1226 倒水问题
cdoevs 1226 倒水问题
有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水。设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒。已知 x 升壶为空 壶, y 升壶为空壶。问如何通过倒水或灌水操作, 用最少步数能在x或y升的壶中量出 z ( z ≤ 100 )升的水 来。
一行,三个数据,分别表示 x,y 和 z;
一行,输出最小步数 ,如果无法达到目标,则输出"impossible"
3 22 1
14
/*注意是两个瓶子在一起才能表示一种状态,考虑好两个瓶子之间倒水的八种情况://向大壶倒满水
//向小壶倒满水
//大壶的水不要
//小壶的水不要
//大壶向小壶倒满水
//大壶向小壶倒水 ,倒不满
//小壶向大壶倒全部水,大壶没满
//小壶向大壶倒水,大壶满了
*/
#define N 120
#include<iostream>
using namespace std;
#include<cstdio>
bool visit[N][N];
#include<queue>
int x,y,z;
struct node{
int big,smal,sum;
};
int bfs(int &ans)
{
visit[][]=true;
queue<node>que;
que.push(node{,,});
while(!que.empty())
{
node now=que.front();
que.pop();
int a=now.big,b=now.smal,dep=now.sum;
if(a==z||b==z)
{
ans=dep;
return ;
}
if(!visit[x][b])
{
visit[x][b]=true;
que.push(node{x,b,dep+});
}
if(!visit[a][y])
{
visit[a][y]=true;
que.push(node{a,y,dep+});
}
if(!visit[][b])
{
visit[][b]=true;
que.push(node{,b,dep+});
}
if(!visit[a][])
{
visit[a][]=true;
que.push(node{a,,dep+});
}
if(a>=(y-b)&&!visit[a-(y-b)][y])
{
visit[a-(y-b)][y]=true;
que.push(node{a-(y-b),y,dep+});
}
if(a<y-b&&!visit[][a+b])
{
visit[][a+b]=true;
que.push(node{,a+b,dep+});
}if(b>=(x-a)&&!visit[x][b-(x-a)])
{
visit[x][b-(x-a)]=true;
que.push(node{x,b-(x-a),dep+});
}if(b<(x-a)&&!visit[a+b][])
{
visit[a+b][]=true;
que.push(node{a+b,,dep+});
}
}
}
int main()
{
int ans=;
scanf("%d%d%d",&x,&y,&z);
if(x<y) swap(x,y);
bfs(ans);
if(ans) printf("%d\n",ans);
else printf("impossible\n");
return ;
}
广度优先搜索 cdoevs 1226 倒水问题的更多相关文章
- 三个水杯——java,广度优先搜索
题目如下: 21-三个水杯 内存限制:64MB 时间限制:1000ms 特判: No通过数:51 提交数:137 难度:4 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个 ...
- CodeVS 1226 倒水问题【DFS/BFS】
题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...
- 图的广度优先搜索(BFS)
把以前写过的图的广度优先搜索分享给大家(C语言版) #include<stdio.h> #include<stdlib.h> #define MAX_VERTEX_NUM 20 ...
- 广度优先搜索(BFS)
定义 维基百科:https://en.wikipedia.org/wiki/Breadth-first_search 给定图G=(V,E)和一个可识别的源结点s,广度优先搜索对图G中的边进行系统性的探 ...
- 总结A*,Dijkstra,广度优先搜索,深度优先搜索的复杂度比较
广度优先搜索(BFS) 1.将头结点放入队列Q中 2.while Q!=空 u出队 遍历u的邻接表中的每个节点v 将v插入队列中 当使用无向图的邻接表时,复杂度为O(V^2) 当使用有向图的邻接表时, ...
- ACM题目————图的广度优先搜索
题目描述 图的广度优先搜索类似于树的按层次遍历,即从某个结点开始,先访问该结点,然后访问该结点的所有邻接点,再依次访问各邻接 点的邻接点.如此进行下去,直到所有的结点都访问为止.在该题中,假定所有的结 ...
- SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...
- HDU 1312 Red and Black DFS(深度优先搜索) 和 BFS(广度优先搜索)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
随机推荐
- 容器--ArrayList
一.前言 作为List的重要实现之一,ArrayList已经成了我们编写程序时不可或缺的重要容器之一,面试的时候也经常会被问到,所以,深入理解其实现机制,无论是对于我们正确使用这个类来说,还是准备面试 ...
- Java与线程
导语 我们知道,new一个thread,调用它的start的方法,就可以创建一个线程,并且启动该线程,然后执行该线程需要执行的业务逻辑, 那么run方法是怎么被执行的呢? Java线程和os线程 os ...
- Verilog学习笔记简单功能实现(三)...............同步有限状态机
在Verilog中可以采用多种方法来描述有限状态机最常见的方法就是用always和case语句.如下图所示的状态转移图就表示了一个简单的有限状态机: 图中:图表示了一个四状态的状态机,输入为A和Res ...
- [小北De编程手记] : Lesson 06 - Selenium For C# 之 流程控制
无论你是用哪一种自动化测试的驱动框架,当我们构建一个复杂应用程序的自动化测试的时候.都希望构建一个测试流程稳定,维护成本较低的自动化测试.但是,现实往往没有理想丰满.而这一篇,我会为大家讲解我们在使用 ...
- 跨平台的 SQL 客户端
The major update to SQL client was to move to the .NET Core networking libraries instead of the nati ...
- Android笔记——Android中数据的存储方式(一)
Android中数据的存储方式 对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其 ...
- C# 枚举、字符串、值的相互转换
using System; class Program{ public enum Color { Red = 0xff0000 , Orange = ...
- Microsoft Dynamics CRM 2013 CD-KEY
Microsoft Dynamics CRM Workgroup Server 2013 (5 CAL limit):NX77Y-BTBCV-JP3T3-8W7JH-94QJP Microsoft D ...
- SharePoint 2013 排错之"Code blocks are not allowed in this file"
今天,设置页面布局的自定义母版页时,设置完了以后保存,然后预览报错,错误如下截图:删掉自定义母版页的MasterPageFile属性,页面依然报错:感觉甚是奇怪,因为有版本控制,还原为最初的版本,依然 ...
- SharePoint2013 - 移动文档
In SharePoint 2010, the easiest way to transfer documents from one library to another involved using ...