POJ 1606 Jugs(BFS:找最短路径并输出)
来源:互联网 发布:c语言两条和 编辑:程序博客网 时间:2024/06/10 14:17
POJ 1606 Jugs(BFS:找最短路径并输出)
http://poj.org/problem?id=1606
题意:
又是给你两个容量为A和B的水杯,要你倒出B杯子有C升水的路径.
分析:
本题之前我就做过一道类似的的:
http://blog.csdn.net/u013480600/article/details/25241777
上面有分析.下面直接给出代码:
AC代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<stack>using namespace std;const int maxr=100+5;const int maxc=100+5;const int maxn=10000+100;//这个规模是测试OJ得出的int A,B,C;int vis[maxr][maxc],dist[maxr][maxc],pre[maxr][maxc];struct Cell{ int a,b; Cell(int a,int b):a(a),b(b){}};int cnt;struct Node{ int a,b; int t; Node(){} Node(int a,int b,int t):a(a),b(b),t(t){}}nodes[maxn];Cell BFS(){ queue<Cell> Q; Q.push(Cell(0,0)); memset(vis,0,sizeof(vis)); vis[0][0]=1; dist[0][0]=0; cnt=0; while(!Q.empty()) { Cell cell=Q.front();Q.pop(); int a=cell.a,b=cell.b; for(int d=0;d<6;d++) { int na,nb; if(d==0){na=A,nb=b;} else if(d==1) {na=a,nb=B;} else if(d==2) {na=0,nb=b;} else if(d==3) {na=a,nb=0;} else if(d==4) { int all=a+b; na= all>=B?all-B:0; nb= all>=B? B:all; } else if(d==5) { int all=a+b; na= all>=A? A:all; nb= all>=A? all-A:0; } if(vis[na][nb]==0) { vis[na][nb]=1; dist[na][nb]=dist[a][b]+1; nodes[cnt++]=Node(a,b,d); pre[na][nb]=cnt-1; Q.push(Cell(na,nb)); if(nb==C) return Cell(na,nb); } } } return Cell(-1,-1);}int main(){ while(scanf("%d%d%d",&A,&B,&C)==3) { Cell cell=BFS(); stack<int> S; int a=cell.a ,b=cell.b; while(true) { int tmp=pre[a][b]; S.push(nodes[tmp].t); a=nodes[tmp].a,b=nodes[tmp].b; if(a==0&&b==0) break; } while(!S.empty()) { int t=S.top();S.pop(); if(t==0) printf("fill A\n"); else if(t==1) printf("fill B\n"); else if(t==2) printf("empty A\n"); else if(t==3) printf("empty B\n"); else if(t==4) printf("pour A B\n"); else if(t==5) printf("pour B A\n"); } printf("success\n"); } return 0;}
0 0
- POJ 1606 Jugs(BFS:找最短路径并输出)
- poj 1606 Jugs(广搜BFS+路径输出)
- poj 1606 Jugs (BFS)
- POJ (BFS + 路径输出)
- ZOJ-1005-Jugs【BFS+记录路径】
- poj 1606 Jugs
- POJ 1606 Jugs
- poj 1606 Jugs
- POJ 1606 Jugs
- poj 1606 Jugs
- POJ-1606 Jugs
- poj 3984 迷宫问题(BFS+输出路径)
- POJ 1077 Eight(BFS:输出路径)
- poj-3084 输出路径的BFS
- poj 3984 迷宫问题 bfs输出路径
- poj 3984 迷宫问题【bfs+输出路径】
- poj 3984 迷宫问题(BFS+输出路径)
- poj 3984 (bfs+输出路径)
- JBPM4基础篇02-管理流程定义
- 二分查找算法
- magento禁止LOG,写入文件和写入数据库表。
- JBPM4基础篇03-管理流程实例
- Lua metatable 与 __index方法
- POJ 1606 Jugs(BFS:找最短路径并输出)
- 如何编程实现备份数据库
- JBPM4基础篇04-设计请假流程,JBPM集成到Web Project
- 1027.欧拉回路
- OracleDBConsoleorcl服务无法启动
- 项目二-职员有薪水
- JBPM4基础篇05-设计请假流程,流程的发起,执行,驳回,监控web Demo
- Oracle 隐藏参数:_undo_autotune、一个吃力不讨好的活
- 禁用ViewPager左右两侧拉到边界的渐变颜色