題意:三個杯子,一開始只有第乙個杯子有水(滿的)。判斷是否能通過互相倒水,倒出平分的情況,輸出最小步數,或者no
題解:bfs6種倒水情況即可。詳情看**注釋。
#include#include#include#include#includeusing namespace std;
const int maxn = 101;
struct node;
queueq;
int book[maxn][maxn][maxn]; // 標記陣列
int a,b,c,aim;
int check(int x,int y,int z)//平分條件
void bfs()
for(int i = 1 ; i <= 6 ; i ++)
else
next.z = now.z;
if(!book[next.x][next.y][next.z])
}if(i == 2)
else
next.y = now.y;
if(!book[next.x][next.y][next.z])
}if(i == 3)
else
next.z = now.z;
if(!book[next.x][next.y][next.z])
}if(i == 4)
else
next.x = now.x;
if(!book[next.x][next.y][next.z])
}if(i == 5)
else
next.y = now.y;
if(!book[next.x][next.y][next.z])
}if(i == 6)
else
next.x = now.x;
if(!book[next.x][next.y][next.z])
}} }
cout << "no" << endl;
}int main(){
while(cin >> a >> b >> c){
if(a == 0 && b == 0 && c== 0) break;
memset(book,0,sizeof(book)); // 清空很重要
while(!q.empty())
q.pop();
if(a%2 == 1) { // 若為奇數肯定不可能平分
cout << "no"<
hdu 1495 非常可樂 bfs
題目 剛開始那做這個題 怎麼也想不出為什麼可以用bfs 我認為做這個題目 你想到有6種情況哦 假設s 是瓶子 n,m 是有容量的杯子,s可以倒入n中 s也可以倒入m中 n可以倒入s中 n 也可以倒入m中 m也是一樣的哦 所以就有六種情況哦。下面看具體ac 裡面有註解哦 include include...
HDU 1495 非常可樂 (BFS)
problem description 大 家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這 一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m...
hdu 1495 非常可樂 bfs
大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子,它們的容量分別是n 毫公升和m 毫公升 可樂的體積為s s 101 毫公升...