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