`

南阳理工OJ 21 三个水杯 宽度优先遍历

 
阅读更多
/*
用队列来宽度搜索
初始状态先入队,一个有六种相互倒水的可能,
把这些没有出现过的状态全部入队,依次检查。
如果检查到结果状态,就输出
如果队列为空,就输出-1
*/
#include<iostream>
#include<map>
using namespace std;
map<int,int>mm;//用来标记是否用过
int queue[1000],base,top,result,ra,rb,rc,a,b,c,term;
bool f(int &x,int &y,int rx,int ry)//把x 的水倒进y里,当然需要知道x的容量和y的容量
{
	if(x==0||y==ry)return(false);//如果到不成就返回
	int ta=a,tb=b,tc=c;//把原来的水存起来
	if(x<ry-y)y+=x,x=0;
	else x-=ry-y,y=ry;
	term=10000*a+100*b+c;//得出新的方案
	a=ta;b=tb;c=tc;//还原原来的水
	if(mm.find(term)==mm.end())//如果新状态没有出现过
	{
		mm[term]=mm[queue[base]]+1;//就标记一下,并且记录是第几步到的这里
		if(term==result)return(true);//如果新状态是最后结果,就返回真
		queue[top++]=term;//新方案入队
		return(false);//返回
	}
	return(false);//如果新方案出现过,什么都不做
}
int main()
{
	int T,x,y,z;
	cin>>T;
	while(T--)
	{
		top=base=0;
		cin>>ra>>rb>>rc;cin>>x>>y>>z;//输入abc的容量和要求的结果
		result=x*10000+y*100+z;mm[ra*10000]=0;queue[top++]=ra*10000;//把结果转换成整数,并且入队
		while(top!=base)//进入队列,一个一个检查
		{
			a=queue[base]/10000;b=(queue[base]/100)%100;c=queue[base]%100;//先把abc还原
			if(f(a,b,ra,rb)||f(a,c,ra,rc)||f(b,a,rb,ra)||f(b,c,rb,rc)||f(c,a,rc,ra)||f(c,b,rc,rb))break;
			base++;
		}
		if(mm.find(result)!=mm.end())cout<<mm[result]<<endl;//如果找到结果就输出最小步数
		else cout<<"-1\n";//否则输出-1
		mm.clear();
	}
	return(0);
}

 

1
5
分享到:
评论

相关推荐

    南阳理工oj离线题库

    南阳理工oj就是这样一个平台,专为南阳理工学院的学生和编程爱好者设计,提供了丰富的编程题目供他们挑战和提升自己的能力。 离线题库的组成部分可能包括以下几点: 1. 题目描述:每个题目都有详细的描述,包括...

    南阳理工学院OJ_个人AC代码包(Java提交)

    【南阳理工学院OJ_个人AC代码包(Java提交)】是针对Java初学者的一份宝贵资源,它包含了参与ACM国际大学生程序设计竞赛(ICPC)时在南阳理工学院在线评测系统(OJ)上获得正确答案的代码实例。这些代码展示了如何用...

    南阳理工学院OJ第1版解题报告V1.0.pdf

    ### 南阳理工学院OJ第1版解题报告概览 #### 1. A+B Problem 虽然解题思路在报告中被省略,但我们可以推测这是一个基础的数学加法问题,涉及到数字输入与基本算术操作。此类题目旨在测试初学者对编程语言基本输入...

    南阳理工oj stl练习ac代码

    南阳理工学院的OJ(Online Judge)平台为学生提供了丰富的STL练习题目,通过AC(Accepted,表示代码正确通过所有测试用例)的代码,我们可以学习到STL在实际问题解决中的应用。 1. 容器: STL包含多种容器,如...

    湖南理工oj题解(学习用)-共230道题

    【标题】:“湖南理工oj题解(学习用)-共230道题”揭示了这是一个针对湖南理工大学在线编程竞赛平台(Online Judge,简称OJ)的题解集合,包含了230个不同题目。这类资源通常由参赛者或者经验丰富的程序员整理,...

    哈理工oj 1084百步穿杨

    哈理工OJ1084答案哈理工OJ1084答案哈理工OJ1084答案哈理工OJ1084答案哈理工OJ1084答案

    湖南理工学院OJ-小鱼比可爱

    湖南理工学院小鱼比可爱OJ题

    oj刷题 西安理工大学学生在线实验系统编程题答案(超级详细)

    这个“oj刷题”压缩包文件很可能是包含了西安理工大学在线实验系统中的一些典型题目,包括但不限于排序算法(如冒泡排序、快速排序、归并排序)、搜索算法(如二分查找、深度优先搜索、广度优先搜索)、图论问题(如...

    基于Laravel 5.0的OJ题解网站 , 目前涵盖安科OJ,南阳OJ,杭电OJ ,北大OJ,浙大OJ.zip

    【描述】中提到的“目前涵盖安科OJ,南阳OJ,杭电OJ,北大OJ,浙大OJ”意味着这个题解网站已经集成了多个知名OJ平台的题目,用户可以在一个统一的平台上找到这些不同OJ的题目并查看解决方案。安科OJ、南阳OJ、杭电OJ...

    湖南理工学院Oj-等腰三角形-嵌套循环

    湖南理工学院Oj-等腰三角形-嵌套循环

    DFS:depth first search深度优先搜索(迷宫寻路) BFS:breadth first search宽度优先搜

    深度优先搜索(DFS,Depth First Search)和宽度优先搜索(BFS,Breadth First Search)是图论和算法中的两种基本搜索策略,常用于解决迷宫寻路、树遍历以及网络爬虫等问题。这两种算法各有其特点,适用于不同的场景...

    趣味题:柱状图排序 西安理工大学学生在线实验系统 oj

    趣味题:柱状图排序 西安理工大学学生在线实验系统 oj

    山东理工大学2016级OJ题1832

    4. **函数定义与调用**:每个问题都定义了一个或多个函数,例如 `f` 函数,用于计算特定的数学表达式或者数列的和。在主函数 `main` 中,调用这些函数来完成主要的计算任务。 5. **条件判断**:在解一元二次方程的...

    竞赛题集南阳OJ部分习题及解答其他oj试题及解答

    竞赛题集南阳OJ部分习题及解答其他oj试题及解答提取方式是百度网盘分享地址

    华为OJ,C++答案

    * 循环语句:使用三层for循环来遍历所有可能的三个变量的值。 * 条件语句:使用if语句来判断三个变量是否满足一定的条件。 4. 简单密码破解 这个题目要求将输入的字符串进行简单的密码破解。知识点包括: * 字符...

    北大oj 题目分类

    1. **图遍历**:深度优先遍历(DFS)和广度优先遍历(BFS),如`poj1094`的拓扑排序。 2. **最短路径算法**:Dijkstra、Bellman-Ford、Floyd、堆优化的Dijkstra,用于求解两点间的最短路径,如`poj1860`。 3. **最小...

    湖南理工学院OJ-阶乘求和-定义函数

    湖南理工学院OJ-阶乘求和-定义函数

    山东理工大学2016级OJ题目1834

    山东理工大学2016级OJ题目1834 本题目总共包含五个小题目,每个小题目都涉及到矩阵运算,一共有矩阵转置、杨辉三角、对称矩阵的判定、求一个 3*3 矩阵对角线元素之和、矩阵的旋转五个小题目。 1.矩阵转置 矩阵...

    建二叉树及对二叉树进行遍历

    对于二叉树的遍历,有三种基本方法:前序遍历、中序遍历和后序遍历。 1. **前序遍历**(根-左-右):首先访问根节点,然后递归地访问左子树,最后访问右子树。 2. **中序遍历**(左-根-右):首先递归地访问左子树...

    hustoj - 流行的OJ系统,跨平台、易安装、有题库

    【标题】"hustoj" 是一款流行的在线判题系统(Online Judge,简称OJ),它主要用于教育和考试场景,支持教学管理和编程竞赛。这款系统以其跨平台、易安装和包含题库的特点受到广泛欢迎。 【核心知识点】 1. **在线...

Global site tag (gtag.js) - Google Analytics