NYOJ 三個水杯 搜尋 廣搜 BFS

2021-07-31 04:32:43 字數 1108 閱讀 9441

時間限制:1000 ms | 記憶體限制:65535 kb

難度:4

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

第一行乙個整數n(0

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

2

6 3 1

4 1 1

9 3 2

7 1 1

3

-1

既然是找最少的次數,那就使用廣搜,把當前狀態每乙個可以互相倒水且不與之前重複的狀態放入佇列中,每次取對首元素時判斷是否為最終狀態,不是的話繼續放。如果取到隊空則說明達不到目標返回-1

#include 

#include

#include

#include

using

namespace

std;

int m[3];

int z_m[3];

struct zhuang_tai

}ans,k;

queue

q;map

int>mp;

int pan(zhuang_tai a) ///判斷是否與目標狀態相同

void swp(int a ,int b,int c)

else

///否則把第二個杯子倒滿

ans1.l[c]=ans.l[c];

ans1.sum=0;

if(!mp.count(ans1)) ///判斷三種杯子狀態是否出現過,如果沒有出現過就入隊

}int main()

swp(0,1,2); ///六種相互倒的狀態

swp(0,2,1);

swp(1,0,2);

swp(1,2,0);

swp(2,1,0);

swp(2,0,1);

}cout

<<-1

0;}

NYOJ 21 三個水杯(bfs,廣搜)

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

nyoj 21 三個水杯(廣搜)

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

三個水杯 NYOJ 21(廣搜)

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