題目描述 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
題解bfs,一共有6種可能:
1、a桶倒空 2、b桶倒空
3、a桶倒滿 4、b桶倒滿
5、a桶倒入b桶
1)溢位
2)不溢位
6、b桶倒入a桶
1)溢位
2)不溢位
竟然把這裡寫錯了。
//5 x->y
p = in
; p.x = p.x - min(y-p.y,p.x);
p.y = p.y + min(y-p.y,p.x);
q.push(p);
//6 y->x
p = in
; p.x = p.x + min(x-p.x,p.y);
p.y = p.y - min(x-p.x,p.y);
q.push(p);
#include#include#include
#include
#define n 1000
using
namespace
std;
struct
cupfirst,now;
intx,y,z;
queue
q;bool
f[n][n];
void extend(cup in
)void
bfs()
extend(now);
}printf(
"impossible");
}int
main()
倒水問題 (codevs 1226) 題解
問題描述 有兩個無刻度標誌的水壺,分別可裝x公升和y公升 x,y 為整數且均不大於100 的水。設另有一水缸,可用來向水壺灌水或接從水壺中倒出的水,兩水壺間,水也可以相互傾倒。已知x公升壺為空壺,y公升壺為空壺。問如何通過倒水或灌水操作,用最少步數能在x或y公升的壺中量出 z z 100 公升的水來...
倒水問題 (codevs 1226) 題解
有兩個無刻度標誌的水壺,分別可裝x公升和y公升 x,y 為整數且均不大於100 的水。設另有一水缸,可用來向水壺灌水或接從水壺中倒出的水,兩水壺間,水也可以相互傾倒。已知x公升壺為空壺,y公升壺為空壺。問如何通過倒水或灌水操作,用最少步數能在x或y公升的壺中量出 z z 100 公升的水來。3 22...
CODEVS 倒水問題
題目描述 有兩個無刻度標誌的水壺,分別可裝 x 公升和 y 公升 x,y 為整數且均不大於 100 的水。設另有一水 缸,可用來向水壺灌水或接從水壺中倒出的水,兩水壺間,水也可以相互傾倒。已知 x 公升壺為空 壺,y 公升壺為空壺。問如何通過倒水或灌水操作,用最少步數能在x或y公升的壺中量出 z z...