题目链接:http://poj.org/problem?id=3414

题意:三个值A, B, C, A和B是两个杯子的容量,问最短操作数使A或者B里的水量是C。有三种操作。

思路:dfs.暴力 很简单。唯一不同的大概是这次做搜索都是自己想方设法的代码实现。中途很多问题。求得不是最大值。怎么保存操作过程。但好像不是原创方法。

附AC代码:

 // dfs 开始觉得一定是bfs 我只要把两个杯子的各种操作遍历一遍 直到某个杯子里的水和C相等就结束。
// 然后想到的是如何分开这两个杯子。因为一次操作改变的不一定是一个值。所以两个杯子的值也不能放在一个队列里遍历。
// 于是。就是dfs。觉得回溯时dfs参数为空和不回溯dfs参数有两个都是可以的。
// 详见代码。 #include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std; int va, vb, c;
int vis[][];
int anss;
string ans;
string temp; void dfs(int aa, int bb, int step) {
if (aa == c || bb == c) {
if (anss > step) {
anss = step;
ans = temp;
}
return;
}
int a = aa, b = bb;
vis[a][b] = ;
string t = "";
// fill a
if (a < va) {
a = va;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
vis[a][b] = ;
temp = t;
}
a = aa;
}
// drop a
if (a > ) {
a = ;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
vis[a][b] = ;
temp =t;
}
a = aa;
}
// pour a to b
if (a > && b < vb) {
int ma = min(a, vb-b);
a -= ma;
b += ma;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
vis[a][b] = ;
temp = t;
}
a = aa, b = bb;
} // fill b
if (b < vb) {
b = vb;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
vis[a][b] = ;
temp = t;
}
b = bb;
}
// drop b
if (b > ) {
b = ;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
temp = t;
vis[a][b] = ;
}
b = bb;
}
// pour b to a
if (b > && a < va) {
int mb = min(b, va-a);
b -= mb;
a += mb;
if (vis[a][b] == ) {
vis[a][b] = ;
t = temp;
temp += "";
dfs(a, b, step+);
temp = t;
vis[a][b] = ;
}
a = aa;
b = bb;
}
return;
} int main() {
int a, b, step;
while(cin >> va >> vb >> c) {
anss = ;
a = , b = , step = ;
memset(vis, , sizeof(vis));
temp = "";
dfs(a, b, step);
if (anss == ) {
cout << "impossible\n";
continue;
}
cout << anss << endl;
int len = ans.length();
for (int i=; i<len; ++i) {
if (ans[i] == '') cout << "FILL(1)\n";
if (ans[i] == '') cout << "DROP(1)\n";
if (ans[i] == '') cout << "POUR(1,2)\n";
if (ans[i] == '') cout << "FILL(2)\n";
if (ans[i] == '') cout << "DROP(2)\n";
if (ans[i] == '') cout << "POUR(2,1)\n";
}
}
return ;
}

POJ 3414 dfs 回溯的更多相关文章

  1. 【POJ - 3009】Curling 2.0 (dfs+回溯)

    -->Curling 2.0 直接上中文 Descriptions: 今年的奥运会之后,在行星mm-21上冰壶越来越受欢迎.但是规则和我们的有点不同.这个游戏是在一个冰游戏板上玩的,上面有一个正 ...

  2. POJ 3414 Pots(罐子)

    POJ 3414 Pots(罐子) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 You are given two po ...

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

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

  4. BFS POJ 3414 Pots

    题目传送门 /* BFS:六种情况讨论一下,BFS轻松解决 起初我看有人用DFS,我写了一遍,TLE..还是用BFS,结果特判时出错,逗了好长时间 看别人的代码简直是受罪,还好自己终于发现自己代码的小 ...

  5. 【BFS】POJ 3414

    直达 -> POJ 3414 Pots 相似题联动–>HDU 1495 非常可乐 题意:两个壶倒水,三种操作,两个桶其中一个满足等于C的最少操作,输出路径.注意a,b互倒的时候能不能倒满, ...

  6. POJ 3414 Pots

    Pots Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  7. 素数环(dfs+回溯)

    题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...

  8. NOJ 1074 Hey Judge(DFS回溯)

    Problem 1074: Hey Judge Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format: ...

  9. 广搜+输出路径 POJ 3414 Pots

    POJ 3414 Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13547   Accepted: 5718   ...

随机推荐

  1. 介绍一个Redis的WEB 客户端

    http://webd.is/ $ git clone git://github.com/nicolasff/webdis.git                $ cd webdis$ make$ ...

  2. HTML实例 - 购物商场页面

    效果图 代码 https://coding.net/u/James_Lian/p/Shopping-page/git 示例 https://coding.net/u/James_Lian/p/Shop ...

  3. mysql查询乱码解决方法

    http://blog.csdn.net/u012408083/article/details/52734762 MySQL 命令行查询乱码 编码问题 当使用数据库工具查询数据时显示数据正常,中文也很 ...

  4. 自己主动检測&后台复制光盘内容

    原理:利用python的win32模块,注冊服务,让代码在后台执行,检測光盘并复制文件 启动的方法就是直接在cmd下,main.py install ,然后去windows 的服务下就能够看到The ...

  5. 002-原始jpa以及基本加载过程,基本sql使用

    一.概述 1.1.创建 public void createMethod() { EntityManagerFactory factory = Persistence.createEntityMana ...

  6. Django之MTV

    一.MTV模型 Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑,并在适当的 ...

  7. maven-eclipse 中index.html页面乱码

    maven-eclipse 中index.html页面乱码: pox.xml修改: <project> -- <properties> <argLine>-Dfil ...

  8. Polya

    using namespace std; typedef long long LL; const int MAXN = 1e3 +10; const LL MOD = (LL)1 << 6 ...

  9. 图解Kerberos认证工作原理

    本文是我在看了这篇英文说明之后的总结 https://technet.microsoft.com/zh-cn/library/cc961976.aspx 是总结,不是翻译,所以是我看后按自己的理解写的 ...

  10. JavaScript高级内容笔记:原型链、继承、执行上下文、作用域链、闭包

    最近在系统的学习JS深层次内容,并稍微整理了一下,作为备忘和后期复习,这里分享给大家,希望对大家有所帮助.如有错误请留言指正,tks. 了解这些问题,我先一步步来看,先从稍微浅显内容说起,然后引出这些 ...