博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BFS】POJ 3414
阅读量:6373 次
发布时间:2019-06-23

本文共 1785 字,大约阅读时间需要 5 分钟。

题意:两个壶倒水,三种操作,两个桶其中一个满足等于C的最少操作,输出路径。注意a,b互倒的时候能不能倒满,或者还有剩下的。

a->b || b->a || a->0 || b->0 || a->A || b->B (0<=a<=A&&0<=b<=B)

思路:虽说是BFS但是情况就这几种,分别写出来之后判断即可。输出路径可以用递归,我这里用了string来存。

#include 
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn = 1000+5;char *S[3] ={ "FILL","POUR","DROP"};int A,B,C;int vis[maxn][maxn];struct node{ int a,b; string opt[maxn]; //存路径再输出 int step ;}ans;bool check(node x){ if(x.a == C||x.b == C) return true; return false;}int bfs(){ queue
Q; node p,t; p.a = p.b = p.step = 0; Q.push(p); while(Q.size()){ p = Q.front(); Q.pop(); if(check(p)) { ans = p; return true; } //DROP(1) if(!vis[0][p.b]){ t = p; t.a = 0; t.step++; t.opt[t.step] = "DROP(1)"; Q.push(t); vis[0][p.b] = 1; } //DROP(2) if(!vis[p.a][0]){ t = p; t.b = 0; t.step++; t.opt[t.step] = "DROP(2)"; Q.push(t); vis[p.a][0] = 1; } //FILL(1) if(!vis[A][p.b]){ t = p; t.a = A; t.step++; t.opt[t.step] = "FILL(1)"; Q.push(t); vis[A][p.b] = 1; } //FILL(2) if(!vis[p.a][B]){ t = p; t.b = B; t.step++; t.opt[t.step] = "FILL(2)"; Q.push(t); vis[p.a][B] = 1; } //POUR(2,1) if(!vis[p.b>(A-p.a)?A:(p.a+p.b)][p.b>(A-p.a)?(p.b-A+p.a):0]){ t = p; t.a = p.b>(A-p.a)?A:(p.a+p.b); t.b = p.b>(A-p.a)?(p.b-A+p.a):0; t.step++; t.opt[t.step] = "POUR(2,1)"; Q.push(t); vis[t.a][t.b] = 1; } //POUR(1,2) if(!vis[p.a>(B-p.b)?(p.a-B+p.b):0][p.a>(B-p.b)?B:(p.a+p.b)]){ t = p; t.a = p.a>(B-p.b)?(p.a-B+p.b):0; t.b = p.a>(B-p.b)?B:(p.a+p.b); t.step++; t.opt[t.step] = "POUR(1,2)"; Q.push(t); vis[t.a][t.b] = 1; } } return -1;}int main(){ while(~scanf("%d%d%d",&A,&B,&C)){ memset(vis,0,sizeof(vis)); if(bfs()>0){ cout<
<

转载于:https://www.cnblogs.com/MIKORU/p/5796741.html

你可能感兴趣的文章
【不定期更新】游戏开发中的一些良好习惯与技术技巧
查看>>
DNS的初步了解
查看>>
多线程核对MD5码脚本
查看>>
LINUX 命令ifconfig 无效
查看>>
MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
查看>>
Oracle 11g安装过程中错误解决
查看>>
JavaScript强化教程——jQuery AJAX 实例
查看>>
Java中HashMap,LinkedHashMap,TreeMap的区别
查看>>
iPhone消息推送机制实现与探讨(转)
查看>>
iphone 线程 NSCondition NSThread
查看>>
Debian8添加kali源并安装metasploit
查看>>
Linux redhat 5.7 安装 Teamviewer7
查看>>
android EditText inputType说明
查看>>
交叉熵代价函数(作用及公式推导)
查看>>
这个用markdown编写
查看>>
display、 float 、position
查看>>
centos7.4 安装LAMP环境
查看>>
poj 1821 Fence(单调队列)
查看>>
关于Map集合的遍历总结
查看>>
【计数】【UVA11401】 Triangle Counting
查看>>