B Pour Water倒水問題

2021-10-03 09:24:08 字數 2103 閱讀 7206

倒水問題 「fill a」 表示倒滿a杯,"empty a"表示倒空a杯,「pour a b」 表示把a的水倒到b杯並且把b杯倒滿或a倒空。

輸入包含多組資料。每組資料輸入 a, b, c 資料範圍 0 < a <= b 、c <= b <=1000 、a和b互質。output你的程式的輸出將由一系列的指令組成。這些輸出行將導致任何乙個罐子正好包含c單位的水。每組資料的最後一行輸出應該是「success」。輸出行從第1列開始,不應該有空行或任何尾隨空格。

2 7 5

2 7 4

putfill b

pour b a

success

fill a

pour a b

fill a

pour a b

success

如果你的輸出與sample output不同,那沒關係。對於某個"a b c"本題的答案是多解的,不能通過標準的文字對比來判定你程式的正確與否。 所以本題由 spj(special judge)程式來判定你寫的**是否正確。

此題為倒水問題,有a,b兩個杯子,要倒出容量為c的水,大方面來講有三種情況,即乙個杯子倒空,乙個杯子倒滿以及從乙個杯子倒入另乙個杯子中;而細分來講有八種情況,分別為:

(1)倒空a杯。

(2)倒空b杯。

(3)倒滿a杯。

(4)倒滿b杯。

(5)當a杯不滿且b杯有水的情況,b杯水倒入a杯:

(5.1)a.b水量不大於a杯容量時,倒入後b杯水為0,a杯為a+b的水量。

(5.2)a.b水量大於a杯容量時,倒入後b杯水為a+b的水量減去a的容量,a杯為a的容量。

(6)當b杯不滿且a杯有水的情況,a杯水倒入b杯:

(6.1)a.b水量不大於b杯容量時,倒入後a杯水為0,b杯為a+b的水量。

(6.2)a.b水量大於b杯容量時,倒入後a杯水為a+b的水量減去a的容量,b杯為b的容量。

要找出可行的方案,可以採用bfs寬度搜尋,亦可以採用dfs深度搜尋,此處採用bfs,因為bfs可以找到步驟最少的方案。

首先將每個狀態的a,b的水量用結構體node表示,其中node結構體中的status表示該a,b狀態是經過什麼操作形成的。然後定義乙個佇列,當佇列不為空時,取出隊首元素,根據前面分析的倒水的八種情況,將可能的a,b水量情況壓入佇列之中直到a,b中至少有乙個水量剛好等於目標水量c。最後遞迴輸出達到目標水量進行步驟的status即可。

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=

1e3+5;

struct node

bool

operator==(

const node &s)

const};

bool vis[maxn]

[maxn]

;node pre[maxn]

[maxn]

;void

trans

(node tt)

}void

output

(node tt)

}void

bfs(

int a,

int b,

int c)

if(s.b

//b中水不滿,倒滿b杯中的水 }if

(s.b>0)

//b中有水,倒空b杯中的水 }if

(s.a

//a中水不滿,倒滿a杯中的水 }if

(s.a>0)

//a中有水,倒空a杯中的水 }if

(s.a!=

0&&s.b

//a中有水且b中水不滿,考慮a杯倒入b杯

}else}}

if(s.b!=

0&&s.a

//a中有水且b中水不滿,考慮b杯倒入a杯

CODEVS 倒水問題

題目描述 有兩個無刻度標誌的水壺,分別可裝 x 公升和 y 公升 x,y 為整數且均不大於 100 的水。設另有一水 缸,可用來向水壺灌水或接從水壺中倒出的水,兩水壺間,水也可以相互傾倒。已知 x 公升壺為空 壺,y 公升壺為空壺。問如何通過倒水或灌水操作,用最少步數能在x或y公升的壺中量出 z z...

題解 倒水問題

實現 題目背景 輸入輸出已更改,請不要直接提交原先的 題目描述 假定兩個水壺a和b,供水量不限。可以使用三種方法裝水 給乙個水壺裝水 把乙個水壺倒空 從乙個水壺倒進另乙個水壺。當從乙個水壺倒進另乙個水壺時,如果第乙個水壺倒空,或者第二個水壺裝滿就不能再倒了。例如,乙個水壺a是5加侖和另乙個水壺b是6...

倒水問題 bfs

題目 倒水問題 fill a 表示倒滿a杯,empty a 表示倒空a杯,pour a b 表示把a的水倒到b杯並且把b杯倒滿或a倒空。輸入 輸入包含多組資料。每組資料輸入 a,b,c,資料範圍 0 a b c b 1000 a和b互質。輸出 你的程式的輸出將由一系列的指令組成。這些輸出行將導致任何...