非常可樂 bfs

2021-10-21 20:01:18 字數 1769 閱讀 4344

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s (s<101)毫公升 (正好裝滿一瓶) ,它們三個之間可以相互倒可樂 (都是沒有刻度的,且 s==n+m,101>s>0,n>0,m>0) 。聰明的acmer你們說他們能平分嗎?如果能請輸出倒可樂的最少的次數,如果不能輸出"no"。

input

三個整數 : s 可樂的體積 , n 和 m是兩個杯子的容量,以"0 0 0"結束。

output

如果能平分的話請輸出最少要倒的次數,否則輸出"no"。

sample input

7 4 3

4 1 3

0 0 0

sample outputno3

廣度優先搜尋,六種情況,判斷好往**倒,倒的時候又有哪些情況就可以,最後如果兩個相等,另乙個是零,才是平分,這裡判斷改了好多次。。。。。

因為瓶子都是沒有刻度的,所以每次倒只能倒完(woc,這裡好坑啊,一開始想複雜了好多。。。)

#include

#include

#include

#include

using

namespace std;

int n,m,s;

//代表了三個瓶子的容量

int vis[

120]

[120][

120]

;//標記三個瓶子的狀態是否出現過

struct noderounds,nextrounds;

void

bfs(

) q.

pop();

for(i =

0; i <

6; i++

)else

if(vis[nextrounds.s]

[nextrounds.n]

[nextrounds.m]==0

)}else

if(i==1)

else

if(vis[nextrounds.s]

[nextrounds.n]

[nextrounds.m]==0

)}else

if(i==2)

else

if(vis[nextrounds.s]

[nextrounds.n]

[nextrounds.m]==0

)}else

if(i==3)

else

if(vis[nextrounds.s]

[nextrounds.n]

[nextrounds.m]==0

)}else

if(i==4)

else

if(vis[nextrounds.s]

[nextrounds.n]

[nextrounds.m]==0

)}else

else

if(vis[nextrounds.s]

[nextrounds.n]

[nextrounds.m]==0

)}}}

printf

("no\n");

//如果隊列為空了說明方法都用完了,不可能平分

return;}

intmain()

else

}return0;

}

**:大佬

非常可樂 bfs

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 101 毫公升...

非常可樂 BFS

大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 101 毫公升...

非常可樂(bfs

problem 非常可樂 description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公...