这道题做了很长时间,一开始上课的时候手写代码,所以想到了很多细节,但是创客手打代码的时候由于疏忽又未将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 + 路径打印)的更多相关文章

  1. POJ 3414 Pots ( BFS , 打印路径 )

    题意: 给你两个空瓶子,只有三种操作 一.把一个瓶子灌满 二.把一个瓶子清空 三.把一个瓶子里面的水灌到另一个瓶子里面去(倒满之后要是还存在水那就依然在那个瓶子里面,或者被灌的瓶子有可能没满) 思路: ...

  2. POJ 3414 Pots bfs打印方案

    题目: http://poj.org/problem?id=3414 很好玩的一个题.关键是又16ms 1A了,没有debug的日子才是好日子.. #include <stdio.h> # ...

  3. poj 3414 Pots(bfs+输出路径)

    Description You are given two pots, having the volume of A and B liters respectively. The following ...

  4. POJ 3414 Pots 记录路径的广搜

    Description You are given two pots, having the volume of A and B liters respectively. The following ...

  5. POJ 3414 Pots(BFS)

    Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description You are g ...

  6. POJ - 3414 Pots BFS(著名倒水问题升级版)

    Pots You are given two pots, having the volume of A and B liters respectively. The following operati ...

  7. POJ 3414 Pots (BFS/DFS)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7783   Accepted: 3261   Special Ju ...

  8. poj 3414 Pots bfs+模拟

    #include<iostream> #include<cstring> #define fillA 1 #define pourAB 2 #define dropA 3 #d ...

  9. poj 3414 Pots 【BFS+记录路径 】

    //yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...

随机推荐

  1. idea 添加 VUE 的语法支持和开发

    <一>VUE的开发分两种,一种是直接在HTML文件中使用,一种是VUE文件的形式开发 1,首先我们先让 HTML 文件支持 VUE 的语法指令提示 2,File -> Setting ...

  2. centos7安装Lnmp(Linux+Nginx+MySql+Php+phpMyAdmin+Apache)

    centos7安装Lnmp(Linux+Nginx+MySql+Php)及Apache   Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx是一个高性能的HTTP和反向代理服务器,Ng ...

  3. UI5-Fiori初学者导航

    正文 你是UI5和Fiori的新手?来对地方了. 对我来说,今年是不得不“跟上时代”去提升自己ABAP世界以外的技术技能的困难的一年.幸运的是,有很多可免费获得的信息和课程可以帮你实现这个跳跃.不要等 ...

  4. Slava and tanks 877C

    C. Slava and tanks time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. pbft流程深层分析和解释(转)

    <1>pbft五阶段请求解释 Request  pre-prepare   prepare   commit  执行并reply (1)pre-prepare阶段: 主节点收到客户端请求, ...

  6. NIPS 2016上22篇论文的实现汇集

    http://blog.csdn.net/jiandanjinxin/article/details/54087592 日前,LightOn CEO 兼联合创始人 Igor Carron 在其博客上放 ...

  7. 通过给事件处理程序传递this参数,获取事件源对象的引用。单机提交按钮时在信息框中显示用户输入的字符。

    <script> function mymethod(str) { alert("您输入的是:"+str); } </script><form act ...

  8. Windows Server 2008 R2微软官方下载

    注意:Windows Server 2008 R2仅有64位版本. 以下下载地址为Windows Server 2008 R2 RTM Build 7600.16385的评估版本,此版本可免费试用18 ...

  9. Android Monkey: “No activities found to run, monkey aborted”错误原因

    用monkey测试app时,输入命令adb shell monkey -p  com.example.test -v -500 发现报错, 错误输入: :Monkey: seed=13 count=5 ...

  10. h5做列表 水平分割

    移动端H5各种各样的列表的制作方法(三) by FungLeo 移动端H5各种各样的列表的制作方法(三) by FungLeo 前情回顾 在上一篇博文<移动端各种各样的列表的制作方法(二)> ...