母亲的牛奶【广搜】
来源:互联网 发布:淘宝售后客服工作职责 编辑:程序博客网 时间:2024/05/17 08:17
之前我不会用广搜,只会用深搜来做(见之前的深搜算法),解题思路如下:
1.广度优先搜索bfs
2.以bfs为例,把3个桶的状态作为一个结点入队,产生式规则是每个结点都可以给其他桶倒牛奶,只要倒入桶的状态还没有入队(需要一个标志数组vis记录3个桶的容量,是否出现过),就可以入队,当队为空时,bfs结束。
3.查找vis数组所有A桶为空时,C桶的容量,并从小到大依次输出。
#include<algorithm>#include<cstring>#include<cstdio>#include<queue>using namespace std;int s[21][21];int a[3],p;bool vis[21][21][21],flag,ans[21];struct node{ int x[3];};int main(){ //freopen("cow.in","r",stdin); //freopen("cow.out","w",stdout); scanf("%d %d %d",&a[0],&a[1],&a[2]); queue<node> que;//定义一个队列来储存牛奶情况 node n; n.x[0]=0; n.x[1]=0; n.x[2]=a[2]; que.push(n); vis[0][0][a[2]]=1; while(!que.empty()) { n=que.front();que.pop(); for(int i=0;i<3;i++) for(int j=0;j<3;j++) { //从0到2代表3个桶 if(i==j) continue;//如果倒的桶跟被倒的桶是同一个,continue //i-->j p=min(a[j]-n.x[j],n.x[i]);//p=a[j]-n.x[j]表示把j倒满 //p=n.x[i]表示把i倒完 n.x[i]-=p;n.x[j]+=p;//倒牛奶 if(vis[n.x[0]][n.x[1]][n.x[2]]==0)//若这种情况没出现过 { vis[n.x[0]][n.x[1]][n.x[2]]=1;//记录 que.push(n);//进入队列 } n.x[i]+=p;n.x[j]-=p;//回溯 } } //用两个for来升序输出 for(int i=0;i<=a[1];i++) for(int j=0;j<=a[2];j++) if(vis[0][i][j]==1) ans[j]=1; for(int i=0;i<=a[2];i++) { if(ans[i]==1) { if(flag) printf(" "); else flag=1; printf("%d",i); } }}
1 0
- 母亲的牛奶【广搜】
- 母亲的牛奶--USACO--广搜做法
- 母亲的牛奶【深搜】
- [P1215]母亲的牛奶
- P1215 母亲的牛奶
- 母亲的牛奶
- 搜索算法----母亲的牛奶
- Mother's Milk母亲的牛奶
- (刘禹)母亲的牛奶~哈哈~
- USACO 母亲的牛奶 Mother's Milk
- 【原创】母亲的牛奶(上)
- 【原创】母亲的牛奶(下)
- 母亲的牛奶(提高组)
- 竞赛题目-【USACO TRAINING】母亲的牛奶
- Usaco 1.4.4 母亲的牛奶(Mother's Milk)
- USACO:1.4.4 Mother's Milk 母亲的牛奶 解析
- uscao母亲的牛奶 dfs记忆化搜索
- NOIP2016年普及组模拟考试(9.3) 5.母亲的牛奶
- 线程简单通信 线程回调 例子
- 解决PHPMyAdmin上传文件大小限制的配置方法
- WinDbg学习(一)入门
- 笔试题(二)
- Android图片压缩(质量压缩和尺寸压缩)
- 母亲的牛奶【广搜】
- 机器人、服务器和操作员的讯息通讯图及协议、端口、用途
- 关于Fragment 不响应onActivityResult的情况分析
- 更加优雅的使用sublime text 3
- EventBus的StickyEvents黏性事件详解及使用说明
- 【NOIP普及组】【DFS】2016年模拟考试(9.3)——母亲的牛奶
- mfc 对话框 split button control
- android 测试
- 前端技巧(一)-----Chrome修改别人网站上的js并执行(仅限未压缩的js)