POJ-3414.Pots.(BFS + 路径打印)
这道题做了很长时间,一开始上课的时候手写代码,所以想到了很多细节,但是创客手打代码的时候由于疏忽又未将pair赋初值,导致一直输出错误,以后自己写代码可以专心一点,可能会在宿舍图书馆或者Myhome,创客晚上好吵呀,隔壁真的服...
本题大意:给定两个杯子的容量,有六种操作,通过操作使得两个被子其中一个杯子的水等于待输入值C,并输出最少操作次数和操作名称。
本题思路:BFS,遇到合适的直接输出,搜完都没有搜到就impossible。
参考代码:
将switch改为if能节省大部分篇幅,但是switch更美观明了一点。
#include <string>
#include <cstring>
#include <iostream>
#include <queue>
#include <stack>
using namespace std; typedef pair<int ,int > P;
const int maxn = + , INF = 0x3f3f3f3f;
int A, B, C, t; struct {
int x, y, cnt;//用来存他爹的坐标和倒水的方式
} Ans[maxn][maxn];
int vis[maxn][maxn];
string ans[] = {
"FILL(1)", "FILL(2)", "DROP(1)", "DROP(2)", "POUR(1,2)", "POUR(2,1)",
}; void bfs() {
queue <P> Q;
vis[][] = ;
Ans[][].x = -, Ans[][].y = -;
Q.push(make_pair(, ));
while(!Q.empty()) {
P now = Q.front(), Next;
stack <string> s1;
Q.pop();
if(now.first == C || now.second == C) {
cout << vis[now.first][now.second] << endl;
int X = now.first;
int Y = now.second;
while(X != -) {
s1.push(ans[Ans[X][Y].cnt]);
int tmp = X;
X = Ans[X][Y].x;
Y = Ans[tmp][Y].y;
}
s1.pop();
while(!s1.empty()) {
cout << s1.top() << endl;
s1.pop();
}
return;
}
for(int i = ; i < ; i ++) {
switch(i) {
case ://将A加满
Next.first = A;
Next.second = now.second;
break;
case ://将B加满
Next.second = B;
Next.first = now.first;
break;
case ://将A倒掉
Next.second = now.second;
Next.first = ;
break;
case ://将B倒掉
Next.first = now.first;
Next.second = ;
break;
case ://将A倒入B中
t = B - now.second;//B中还能倒入的量
Next.first = now.first - t;
if(Next.first < ) Next.first = ;
Next.second = now.first + now.second;
if(Next.second > B) Next.second = B;
break;
case ://将B倒入A中
t = A - now.first;//A中还能倒入的量
Next.second = now.second - t;
if(Next.second < ) Next.second = ;
Next.first = now.first + now.second;
if(Next.first > A) Next.first = A;
break;
}
if(vis[Next.first][Next.second] == INF) {
vis[Next.first][Next.second] = vis[now.first][now.second] + ;
Q.push(Next);
Ans[Next.first][Next.second].x = now.first;
Ans[Next.first][Next.second].y = now.second;
Ans[Next.first][Next.second].cnt = i;
}
}
}
cout << "impossible" << endl;
} int main () {
memset(vis, INF, sizeof(vis));
cin >> A >> B >> C;
bfs();
return ;
}
POJ-3414.Pots.(BFS + 路径打印)的更多相关文章
- POJ 3414 Pots ( BFS , 打印路径 )
题意: 给你两个空瓶子,只有三种操作 一.把一个瓶子灌满 二.把一个瓶子清空 三.把一个瓶子里面的水灌到另一个瓶子里面去(倒满之后要是还存在水那就依然在那个瓶子里面,或者被灌的瓶子有可能没满) 思路: ...
- POJ 3414 Pots bfs打印方案
题目: http://poj.org/problem?id=3414 很好玩的一个题.关键是又16ms 1A了,没有debug的日子才是好日子.. #include <stdio.h> # ...
- poj 3414 Pots(bfs+输出路径)
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- POJ 3414 Pots 记录路径的广搜
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- POJ 3414 Pots(BFS)
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Description You are g ...
- POJ - 3414 Pots BFS(著名倒水问题升级版)
Pots You are given two pots, having the volume of A and B liters respectively. The following operati ...
- POJ 3414 Pots (BFS/DFS)
Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7783 Accepted: 3261 Special Ju ...
- poj 3414 Pots bfs+模拟
#include<iostream> #include<cstring> #define fillA 1 #define pourAB 2 #define dropA 3 #d ...
- poj 3414 Pots 【BFS+记录路径 】
//yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...
随机推荐
- idea 设置某项目路径下的文件在点击浏览器预览时的前缀
01,我们在开发 HTML 页面的时候,可以通过点击右上角的浏览器图标,直接打开浏览器访问,大大方便了开发 02,但是我们在开发 PHP 的时候,一般会自己安装集成环境或者编译环境,从上面的截图我们会 ...
- hadoop-eclipse插件编译及windows下运行wordcount项目
参考文章:http://www.360doc.com/content/16/0227/18/10529016_537828949.shtml, 配置修改:http://blog.csdn.net/lo ...
- Eclipse集成SonarLint
https://docs.sonarqube.org/display/PLUG/Writing+Custom+Java+Rules+101
- Java工具类DateFormatUtils详解
日期和时间格式化实用程序和常量public static String format(Calendar calendar, String pattern) 说明:将日历格式化为特定的模式:参数:cal ...
- kafka无法消费数据
遇到一个问题,使用Python kafka客户端和kafka命令行都无法消费数据,但是在kafka命令行后面添加--partition 0后就可以消费数据. bin/kafka-console-con ...
- vue:绑定数据的vue页面加载会闪烁问题
1:在挂在数据的容器加上属性 v-cloak 2:在css中添加如下代码 但有时候还是会不起作用,可能原因有两个 2.1:display属性被更高权限的display属性覆盖了,我们增加权限就好了 2 ...
- 好玩的Raft动画演示,原理秒懂
关于Raft原理,许多朋友也许不是很明白原理,下面的地址是一个好玩的Raft动画,看完后能够很快的掌握Raft原理: http://thesecretlivesofdata.com/raft/ 动画中 ...
- 支持向量机通俗导论(理解SVM的三层境界)(ZT)
支持向量机通俗导论(理解SVM的三层境界) 原文:http://blog.csdn.net/v_JULY_v/article/details/7624837 作者:July .致谢:pluskid.白 ...
- 小程序:pages/index/index/出现脚本错误或未正确调用Page()
第一次尝试玩小程序,配置好以后报错.pages/index/index/出现脚本错误或未正确调用Page() 才发现解决的方式是:新建的文件默认是没有page()的,所以你需要在.js文件中加上Pag ...
- C# 无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
“/CRM”应用程序中的服务器错误. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的属性“targetF ...