HDOJ1495 非常可樂 bfs

2021-07-05 10:57:55 字數 1028 閱讀 6650

定義結構體儲存當前狀態的m, n, s杯中的可樂,t表示倒可樂次數。讀入m, n, s後保證m < n < s便於bfs,接下來就是6個方向的bfs。

bfs結束的條件是m杯中無可樂,也就是當前n杯的可樂與當前s杯的可樂相等,且n杯的可樂為總可樂體積的一半。接下來就是s倒入

m,s倒入n,m倒入n,n倒入m,m倒入s,n倒入s的6種情況,如果不滿足題意最後則輸出no。

ac**:

#include "iostream"

#include "cstdio"

#include "cstring"

#include "algorithm"

#include "queue"

using namespace std;

const int maxn = 105;

int s, n, m;

bool vis[maxn][maxn];

struct node

;void bfs()

if(x.s + x.m > m)

} else

} if(x.s + x.n > n)

} else

} if(x.m + x.n > n)

} else

} if(x.m + x.n > m)

} else

} y.s = x.s + x.m, y.m = 0, y.n = x.n, y.t = x.t + 1; // m倒入s

if(!vis[y.m][y.n])

y.s = x.s + x.n, y.m = x.m, y.n = 0, y.t = x.t + 1; // n倒入s

if(!vis[y.m][y.n])

} printf("no\n");

}int main(int argc, char const *argv)

if(m > n) swap(m, n);

bfs();

} return 0;

}

HDOJ 1495 非常可樂

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

1495 非常可樂

看題目時萬萬沒想到是bfs 不過這種尋找最少次數的問題確實除了bfs也想不到其他辦法了orz problem description 大家一定覺的運動以後喝可樂是一件很愜意的事情,但是seeyou卻不這麼認為。因為每次當seeyou買了可樂以後,阿牛就要求和seeyou一起分享這一瓶可樂,而且一定要...

hdu 1495 bfs 非常可樂

題意 輸入s,m,n三個數,分別代表可樂,和兩個杯子,三個容器可以互相倒,問能不能把s平分,能的話輸出最小步數,不能就輸出no。思路 bfs,一共有六種情況,s m s向m裡倒 s n,m n,m s,n s,n m。用bfs暴搜,從佇列裡每取出乙個,就用這六種情況擴充套件一次,並把步數加一,直到搜...