poj 3414 Pots bfs+模拟
- #include<iostream>
- #include<cstring>
- #define fillA 1
- #define pourAB 2
- #define dropA 3
- #define fillB 4
- #define pourBA 5
- #define dropB 6
- #define N 10000
- using namespace std;
- int vis[][];
- class node
- {
- public:
- int A, B;
- int dir;
- node()
- {
- A=;
- B=;
- }
- };
- int a, b, c, tot;
- node q[N];
- int pre[N];
- void printPath(int index)
- {
- if(index==)
- {
- cout<<tot<<endl;
- return ;
- }
- ++tot;
- printPath(pre[index]);
- switch(q[index].dir)
- {
- case :
- cout<<"FILL(1)";
- break;
- case :
- cout<<"POUR(1,2)";
- break;
- case :
- cout<<"DROP(1)";
- break;
- case :
- cout<<"FILL(2)";
- break;
- case :
- cout<<"POUR(2,1)";
- break;
- case :
- cout<<"DROP(2)";
- break;
- }
- cout<<endl;
- }
- int bfs()
- {
- int head=, rear=, r;
- node cur, next;
- memset(vis, , sizeof(vis));
- pre[]=;
- vis[][]=;
- while(head<rear)
- {
- cur=q[head];
- if(cur.A==c || cur.B==c)
- {
- printPath(head);
- return ;
- }
- next=cur;
- if(!vis[a][cur.B])//将 A 装满
- {
- next.A=a;
- next.dir=fillA;
- pre[rear]=head;
- vis[a][cur.B]=;
- q[rear++]=next;
- }
- if(!vis[][cur.B])//将 A 倒掉
- {
- next.A=;
- next.dir=dropA;
- pre[rear]=head;
- vis[][cur.B]=;
- q[rear++]=next;
- }
- r=b-cur.B;
- next.dir=pourAB;
- if(r>cur.A && !vis[][cur.B+cur.A])//将A 倒向 B
- {
- next.A=;
- next.B=cur.B+cur.A;
- pre[rear]=head;
- q[rear++]=next;
- vis[][cur.B+cur.A]=;
- }
- else if(r<=cur.A && !vis[cur.A-r][cur.B+r])
- {
- next.A=cur.A-r;
- next.B=cur.B+r;
- pre[rear]=head;
- q[rear++]=next;
- vis[cur.A-r][cur.B+r]=;
- }
- next=cur;//开始错在这里了, 忘记了从新给next赋值了
- if(!vis[cur.A][b])//将 B 装满
- {
- next.B=b;
- next.dir=fillB;
- pre[rear]=head;
- q[rear++]=next;
- vis[cur.A][b]=;
- }
- if(!vis[cur.A][])//将 B 倒掉
- {
- next.B=;
- next.dir=dropB;
- pre[rear]=head;
- q[rear++]=next;
- vis[cur.A][]=;
- }
- r=a-cur.A;
- next.dir=pourBA;
- if(r>cur.B && !vis[cur.B+cur.A][])//将B 倒向 A
- {
- next.B=;
- next.A=cur.B+cur.A;
- pre[rear]=head;
- q[rear++]=next;
- vis[cur.B+cur.A][]=;
- }
- else if(r<=cur.B && !vis[cur.A+r][cur.B-r])
- {
- next.A=cur.A+r;
- next.B=cur.B-r;
- pre[rear]=head;
- q[rear++]=next;
- vis[cur.A+r][cur.B-r]=;
- }
- ++head;
- }
- return ;
- }
- int main()
- {
- while(cin>>a>>b>>c)
- {
- tot=;
- if(c>a && c>b)
- {
- cout<<"impossible"<<endl;
- continue;
- }
- if(!bfs())
- cout<<"impossible"<<endl;
- }
- return ;
- }
poj 3414 Pots bfs+模拟的更多相关文章
- POJ 3414 Pots bfs打印方案
题目: http://poj.org/problem?id=3414 很好玩的一个题.关键是又16ms 1A了,没有debug的日子才是好日子.. #include <stdio.h> # ...
- POJ 3414 Pots(BFS)
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Description You are g ...
- poj 3414 Pots(bfs+输出路径)
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- 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 , 打印路径 )
题意: 给你两个空瓶子,只有三种操作 一.把一个瓶子灌满 二.把一个瓶子清空 三.把一个瓶子里面的水灌到另一个瓶子里面去(倒满之后要是还存在水那就依然在那个瓶子里面,或者被灌的瓶子有可能没满) 思路: ...
- poj 3414 Pots 【BFS+记录路径 】
//yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...
- BFS POJ 3414 Pots
题目传送门 /* BFS:六种情况讨论一下,BFS轻松解决 起初我看有人用DFS,我写了一遍,TLE..还是用BFS,结果特判时出错,逗了好长时间 看别人的代码简直是受罪,还好自己终于发现自己代码的小 ...
- 广搜+输出路径 POJ 3414 Pots
POJ 3414 Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13547 Accepted: 5718 ...
随机推荐
- weex逻辑控制
在WEEX中,有if 和 repeat 两种逻辑运算,需要注意的是,逻辑控制不能够作用于<template>这样的根节点. if 控制判断条件true/false直接对节点进行操作,if= ...
- Python之路第一课Day9--随堂笔记之一(堡垒机实例以及数据库操作)未完待续....
一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: ...
- webpack模块加载css文件及图片地址
webpack支持css文件加载并打包,只需安装相应加载器并在配置文件中配置 . 加载的css文件内容会与该模块里的js内容混合封装,这样做的好处是一个js文件包含了所有的css与js内容,有效减少了 ...
- tab22
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- OUTLOOK 发生错误0x8004010D
问题: outlook 2003 在接收邮件时报错: “正在接收”报告了错误(0x8004010D):“在包含您的数据文件的驱动器上,磁盘空间不足.请清空“已删除邮件”文件夹或删除某些文件以释放 ...
- java学习之面向对象(2)
在描述事物的时候,该事物已存在就具备的一些内容,这是我们就可以把它们都定义在构造函数中,那么什么是构造函数呢? 构造函数就是构建创造对象时调用的函数,它可以给对象进行初始化.构造函数与类名相同,第一个 ...
- 执行jar文件生成pdf报错,Unsupported URL <file:///home
java -Djava.library.path=/usr/local/lib/ruby/gems/1.8/gems/sharp_office-1.0.1/ext/sigar -jar /usr/lo ...
- Expert 诊断优化系列------------------给TempDB 降温
前面文章针对CPU.内存.磁盘.语句.等待讲述了SQL SERVER的一些基本的问题诊断与调优方式.为了方便阅读给出导读文章链接方便阅读: SQL SERVER全面优化-------Expert fo ...
- 一小时包教会 —— webpack 入门指南
什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. 我们可以 ...
- ASP.Net请求处理机制初步探索之旅 - Part 3 管道
开篇:上一篇我们了解了一个ASP.Net页面请求的核心处理入口,它经历了三个重要的入口,分别是:ISAPIRuntime.ProcessRequest().HttpRuntime.ProcessReq ...