poj3414 bfs()
来源:互联网 发布:ubuntu16.04 ssd 优化 编辑:程序博客网 时间:2024/06/08 03:04
题目链接:http://poj.org/problem?id=3414
题意: 给你两个空的瓶子,容量为输入的A,B,问经过几步操作任意一个瓶子能够得到C的水量;
6个操作:用水装满A瓶FILL(1),用水装满B瓶FILL(2),将A内水倒出DROP(1),将B内水倒出DROP(2),
将A内的水倒入B内POUR(1,2),将B内的水倒入A内POUR(2,1).注意倒后剩余的水保留在原水瓶中.
解题方法: 直接暴力搜索每一种状态,就可以了...
这是我做的第一道需要输出过程的BFS()具有保留意义..哈哈
#include<iostream>#include<cstring>#include<map>using namespace std;struct node{int a,b;int pos;int step;string out;}ic,tmp;int a,b,c;bool vis[105][105];map<string,bool>m;void init(){memset(vis,0,sizeof(vis));m.clear();}void bfs(){node queue[1000];int head=0;int tail=0;queue[tail].a=queue[tail].b=queue[tail++].step=0;vis[0][0]=1;while(head<tail){ic=queue[head];if(ic.a==c||ic.b==c){cout<<ic.step<<endl;int x=ic.step;string s[1000];for(int i=0;i<x;++i){ s[i]=ic.out;ic=queue[ic.pos];}for(int i=x-1;i>=0;--i)cout<<s[i]<<endl;return ;}//<1>..........................tmp=queue[head];tmp.a=a;if(!vis[tmp.a][tmp.b]){ tmp.step++; tmp.pos=head; tmp.out="FILL(1)"; queue[tail++]=tmp; vis[tmp.a][tmp.b]=1; }//<2>..........................tmp=queue[head];tmp.b=b;if(!vis[tmp.a][tmp.b]){ tmp.step++; tmp.pos=head; tmp.out="FILL(2)"; queue[tail++]=tmp; vis[tmp.a][tmp.b]=1; }//<3>...........................tmp=queue[head];tmp.a=0;if(!vis[tmp.a][tmp.b]){ tmp.step++; tmp.pos=head; tmp.out="DROP(1)"; queue[tail++]=tmp; vis[tmp.a][tmp.b]=1; } //<4>.............................. tmp=queue[head];tmp.b=0;if(!vis[tmp.a][tmp.b]){ tmp.step++; tmp.pos=head; tmp.out="DROP(2)"; queue[tail++]=tmp; vis[tmp.a][tmp.b]=1; } //<5>............................... tmp=queue[head];int x=min(tmp.a,b-tmp.b);tmp.a-=x;tmp.b+=x;if(!vis[tmp.a][tmp.b]){ tmp.step++; tmp.pos=head; tmp.out="POUR(1,2)"; queue[tail++]=tmp; vis[tmp.a][tmp.b]=1; } //<6>............................... tmp=queue[head];x=min(a-tmp.a,tmp.b);tmp.a+=x;tmp.b-=x;if(!vis[tmp.a][tmp.b]){ tmp.step++; tmp.pos=head; tmp.out="POUR(2,1)"; queue[tail++]=tmp; vis[tmp.a][tmp.b]=1; } head++;}cout<<"impossible"<<endl;}int main(){while(cin>>a>>b>>c){init();bfs();}}
0 0
- POJ3414 BFS
- poj3414(BFS)
- poj3414 bfs()
- poj3414(bfs)
- POJ3414解题报告 BFS
- POJ3414 Pots(BFS)
- poj3414 Pots(BFS)
- BFS—POJ3414-Pots
- POJ3414 Pots BFS
- POJ3414(BFS+[手写队列])
- POJ3414 Pots(BFS)
- poj3414 Pots BFS
- 【POJ3414】Pots(BFS)
- poj3414 Pots(bfs)
- poj3414--Pots(bfs,记录路径)
- poj3414(bfs广度优先搜索)
- POJ3414 模拟倒水问题 BFS记录路径
- poj3414(用bfs模拟并回溯)
- 两个排序算法:快排+归并
- 在Microsoft AJAX Library下JavaScript的面向对象开发
- 学习retrofit资料
- iOS点击回到顶部
- PyGobject(一百零二)Cairo系列——贪吃蛇游戏
- poj3414 bfs()
- Android平台上的PacketSender
- C++ bitset类的使用与简介
- 在电脑学习,收集网页内容
- Android Studio 最全快捷键
- unity3d Ugui 5.x学习GridLayoutGroup 脚本创建预设并改变外面容器的大小及单例模式
- 定义一个指针,指向二维数组
- yii2的常用的代码例子(复制即用)
- android 量产软件改动信息