A 三個水杯 BFS

2021-09-02 13:22:11 字數 997 閱讀 3090

題目描述

給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。

輸入第一行乙個整數n(0v2>v3 v1<100 v3>0)表示三個水杯的體積。

第二行給出三個整數e1 e2 e3 (體積小於等於相應水杯體積)表示我們需要的最終狀態

輸出每行輸出相應測試資料最少的倒水次數。如果達不到目標狀態輸出-1

樣例輸入

2

6 3 1

4 1 1

9 3 2

7 1 1

樣例輸出

3

-1

提示

三個水杯,一共有六種倒水的方式,思路就是用bfs找到最少倒水次數

#include#include#includeusing namespace std;

int v1,v2,v3,e1,e2,e3;

struct node

node(int xx,int yy,int zz,int ss) : x(xx) , y(yy) , z(zz) ,step(ss) {}

};int book[110][110][110];

int bfs(int x,int y,int z,int ss)

for(int i = 0 ; i < 6 ; i++)

if(i == 1 ) // a - c

if(i == 2 ) // b - a

if(i == 3 ) // b - c

if(i == 4 ) // c - b

if(i == 5 ) // c - a

int sss = u.step + 1 ;

if(book[s.x][s.y][s.z] == 0)

}} return -1; }

int main()

}

nyoj 三個水杯 BFS

解題思路 有三種容量的杯子 v1,v2,v3 記錄每乙個杯子裡水的體積為 s1,s2,s3 每乙個杯子的剩餘容量為水杯裡的水在相互傾倒的時候會有以下的兩種情況 1 乙個杯子a所剩的容量 大小為va sa 比水杯b要倒過來的水 大小為sb 大的時候可以將b裡的水全部倒到a中,最終a中水的體積為sa s...

nyoj三個水杯 bfs

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。輸入第一行乙個整數...

nyoj三個水杯 bfs

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述給出三個水杯,大小不一,並且只有最大的水杯的水是裝滿的,其餘兩個為空杯子。三個水杯之間相互倒水,並且水杯沒有標識,只能根據給出的水杯體積來計算。現在要求你寫出乙個程式,使其輸出使初始狀態到達目標狀態的最少次數。輸入第一行乙個整數n...