博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codevs1226 倒水问题
阅读量:5248 次
发布时间:2019-06-14

本文共 2090 字,大约阅读时间需要 6 分钟。

题目描述 Description

有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水。设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒。已知 x 升壶为空 壶, y 升壶为空壶。问如何通过倒水或灌水操作, 用最少步数能在x或y升的壶中量出 z ( z ≤ 100 )升的水 来。

输入描述 
Input Description

一行,三个数据,分别表示 x,y 和 z;

输出描述 
Output Description

一行,输出最小步数 ,如果无法达到目标,则输出"impossible"

样例输入 
Sample Input

3 22 1

样例输出 
Sample Output

14

思路:

普通广搜

代码:

#include
#include
#include
#include
#include
#define maxn 100000using namespace std;struct sta{ int x; int y; int step; int frm;};int mx,my,z,j[101][101],solved = 0;sta temp;void input(){ cin>>mx>>my>>z; temp.x = temp.y = temp.step = 0; temp.frm = -1;}sta expand(sta a,int sign){ if(sign == 0) a.x = 0; if(sign == 1) a.y = 0; if(sign == 2) a.x = mx; if(sign == 3) a.y = my; if(sign == 4){ int d; if(mx - a.x < a.y) d = mx - a.x; else d = a.y; a.y -= d; a.x += d; } if(sign == 5){ int d; if(my - a.y < a.x) d = my - a.y; else d = a.x; a.y += d; a.x -= d; } a.frm = sign; a.step++; if(j[a.x][a.y]) a.step = -1; j[a.x][a.y] = 1; return a;}void bfs(){ sta q[maxn]; int h = 0,t = 1; q[h] = temp; while(h != t){ if(q[h%maxn].x == z || q[h%maxn].y == z) { cout<
<
<= 5;i++){ if(i == 0 && (q[h%maxn].x == 0 ||q[h%maxn].frm == 2)) continue; if(i == 1 && (q[h%maxn].y == 0 ||q[h%maxn].frm == 3)) continue; if(i == 2 && (q[h%maxn].x == mx ||q[h%maxn].frm == 0)) continue; if(i == 3 && (q[h%maxn].y == my ||q[h%maxn].frm == 1)) continue; if(i == 4 && (q[h%maxn].y <= 0 || q[h%maxn].x >= mx || q[h%maxn].frm == 5)) continue; if(i == 5 && (q[h%maxn].x <= 0 || q[h%maxn].y >= my || q[h%maxn].frm == 4)) continue; temp = expand(q[h%maxn],i); if(temp.step != -1) { t++; q[t%maxn] = temp; } } h++; }}int main(){ input(); if(z > mx || z > my || !mx || !my || (mx == my && mx != z)){ cout<<"impossible"<

 

转载于:https://www.cnblogs.com/hyfer/p/5812540.html

你可能感兴趣的文章
windown快速安装xgboost
查看>>
Lombok插件
查看>>
Linux上安装Libssh2
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
Hibernate的实体类为什么需要实现 java.io.Serializable 接口
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
LeetCode 160. Intersection of Two Linked Lists
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>