POJ-3414详解,还有简单的翻译

题意:输入a,b,c,分别代表1容器的容量,2容器的容量,经过变化后的某一容器剩下的水的容量,有三种变化。1.把某个瓶子装满,2.把某个瓶子里面的水都倒掉,3.把某个瓶子a里的水倒往另外一个瓶子b,(直到另外一个瓶子b被倒满或者是某个瓶子a被倒空)。输出最少变化次数,并且输出过程。如果不能到达输出impossible.思路:因为是最短路,而且是搜索专题中的,因为是最短路,而且是有多个方向,所以选择用BFS;然后用一个二维数组str来存过程的字符串,并且用pre保存父节点以便于递归输出过程的时候使用找到最
摘要由CSDN通过智能技术生成

题意:输入a,b,c,分别代表1容器的容量,2容器的容量,经过变化后的某一容器剩下的水的容量,有三种变化。1.把某个瓶子装满,2.把某个瓶子里面的水都倒掉,3.把某个瓶子a里的水倒往另外一个瓶子b,(直到另外一个瓶子b被倒满或者是某个瓶子a被倒空)。输出最少变化次数,并且输出过程。如果不能到达输出impossible.

思路:因为是最短路,而且是搜索专题中的,因为是最短路,而且是有多个方向,所以选择用BFS;然后用一个二维数组str来存过程的字符串,并且用pre保存父节点以便于递归输出过程的时候使用找到最初的节点,然后因为要输出最短变化次数,所以直接使用lu来存次数变化,然后再使用一个数组a来保存该方向下选择的哪一个str,最关键的是使用二维数组来储存两瓶水的分别的情况,开始用的一维数组,但是发现两种情况得“同时出现,同时判断”,以题目样例为例子,如果使用两个数组来vis1,vis2储存得话,第一次循环就标记了1倒满得情况(vis1[a],vis2[0])和2倒满(vis1[0],vis2[b])得情况,那第二次循环的时候就不能再从1倒满的情况下进入2倒满得方向(因为vis1[a],vis2[b]已经标记),所以不能。而用二维数组来存得话就不会这样,一开始标记的vis[a][0],vis[0][b],第二次进入循环得时候就不会出现问题。

点击这里:传送门

Code:

#include<iostream>
#include<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值