沧州工商联网站建设,网站建设后台有哪些东西,铭万做的网站,北京营销型网站建设培训班输入样例#xff1a;
8 9 10
输出样例#xff1a;
1 2 8 9 10
本题是宽搜的模版题#xff0c;不论怎么倒牛奶#xff0c;A,B,C 桶里的牛奶可以看做一个三元点集
我们只要找到A桶是空的#xff0c;B,C桶中的状态即可
#include iostream
#include cstring…
输入样例
8 9 10
输出样例
1 2 8 9 10
本题是宽搜的模版题不论怎么倒牛奶A,B,C 桶里的牛奶可以看做一个三元点集
我们只要找到A桶是空的B,C桶中的状态即可
#include iostream
#include cstring
#include algorithm
using namespace std;const int N 21,M N*N*N;
int A,B,C;
// 定义结构体记录队列中三个桶牛奶情况
struct Node
{int a,b,c;
}node[M];
// 每个桶中有多少牛奶的情况
bool vis[N][N][N];void bfs()
{int hh0,tt0;// 最开始的状态C桶是满的 node[0] {0,0,C};// W 记录三个桶的容量 int W[3] {A,B,C};// 标记初始情况C桶中是满的 vis[0][0][C] true;while(hhtt){auto t node[hh];// 有三个桶可以选择并且可以向另外的桶倒牛奶 for(int i0;i3;i){for(int j0;j3;j){if(i!j){// w 记录现在三个桶中的牛奶有多少 int w[3] {t.a,t.b,t.c};// 我们能倒出的牛奶是能倒出桶的容量// 与要倒入桶的容量取较小值 int cur min(w[i],W[j]-w[j]);w[i]-cur,w[j]cur;int a w[0],bw[1],cw[2];// 标记状态 if(!vis[a][b][c]){vis[a][b][c] true;node[tt] {a,b,c};}}}}}return;
}int main(void)
{scanf(%d%d%d, A,B,C);bfs();// 当A桶空的时候有那些状态是合法的 for(int c0;cC;c){for(int b0;bB;b){if(vis[0][b][c]){printf(%d ,c);break;}}}return 0;
}
感谢查看