http://poj.org/problem?id=3414

题意 : 大意是说给你两个杯子的体积和一个目标体积,a,b,c,通过对a,b进行6种操作,调出c体积的水,6种操作分别是把a倒满,把b倒满,把a弄成空的,把b弄成空的,把a里边的倒到b里,把b里边的水倒到a里;

思路 : 算不上说多难,反正就是六种操作

#include<cstdio>
#include<cstring>
#include<iostream>
const int maxn = ;
using namespace std;
int a,b,c;
int r,l;
int vis[][];
struct node
{
int cup1,cup2,step;//两个杯子,走的步数
int mark;//进行标记,方便输出
int prev;//记录前一个状态
}ch[maxn],sh,zh;
int stepp,s;
void bfs()
{
/*初始化*/
ch[].cup1 = ;
ch[].cup2 = ;
ch[].step = ;
ch[].mark = ;
l = ,r = ;
vis[][] = ;
/*队列模拟*/
while(l<r)
{
sh = ch[l] ;
if(sh.cup1 == c||sh.cup2 == c)//结束标志
{
stepp = sh.step ;
s = l ;//输出时寻找前驱的
return ;
}
if(sh.cup1 != a)//将杯1倒满
{
zh.cup1 = a ;
zh.cup2 = sh.cup2 ;
zh.step = sh.step+ ;
zh.prev = l ;
zh.mark = ;
if(!vis[zh.cup1][zh.cup2])
{
vis[zh.cup1][zh.cup2] = ;
ch[r++] = zh ;//这个状态存到ch数组里
}
}
if(sh.cup2 != b)//将杯2装满
{
zh.cup2 = b ;
zh.cup1 = sh.cup1 ;
zh.step = sh.step+ ;
zh.mark = ;
zh.prev = l;
if(!vis[zh.cup1][zh.cup2])
{
vis[zh.cup1][zh.cup2] = ;
ch[r++] = zh ;
}
}
if(sh.cup1 != )//将杯1倒空
{
zh.cup1 = ;
zh.cup2 = sh.cup2 ;
zh.mark = ;
zh.prev = l;
zh.step = sh.step+ ;
if(!vis[zh.cup1][zh.cup2])
{
vis[zh.cup1][zh.cup2] = ;
ch[r++] = zh ;
}
}
if(sh.cup2 != )//将杯2倒空
{
zh.cup2 = ;
zh.cup1 = sh.cup1;
zh.mark = ;
zh.prev = l;
zh.step = sh.step+ ;
if(!vis[zh.cup1][zh.cup2])
{
vis[zh.cup1][zh.cup2] = ;
ch[r++] = zh ;
}
}
if(sh.cup1 != )//将杯1水倒到杯2里
{
if(sh.cup1 >= b-sh.cup2)
{
zh.cup1 = sh.cup1-(b-sh.cup2) ;
zh.cup2 = b ;
}
else
{
zh.cup2 = sh.cup1+sh.cup2 ;
zh.cup1 = ;
}
zh.step = sh.step+ ;
zh.mark = ;
zh.prev = l ;
if(!vis[zh.cup1][zh.cup2])
{
vis[zh.cup1][zh.cup2] = ;
ch[r++] = zh ;
}
}
if(sh.cup2 != )//将杯2水倒到杯1里
{
if(sh.cup2 >= a-sh.cup1)
{
zh.cup2 = sh.cup2- (a-sh.cup1);
zh.cup1 = a ;
}
else
{
zh.cup1 = sh.cup1+sh.cup2 ;
zh.cup2 = ;
}
zh.step = sh.step+ ;
zh.mark = ;//进行标记
zh.prev = l ;
if(!vis[zh.cup1][zh.cup2])
{
vis[zh.cup1][zh.cup2] = ;
ch[r++] = zh ;
}
}
l++ ;
}
}
void printff(int i)
{
if(i == )
return ;
printff(ch[i].prev) ;
if(ch[i].mark == ) printf("FILL(1)\n");
else if(ch[i].mark == ) printf("FILL(2)\n");
else if(ch[i].mark == ) printf("DROP(1)\n");
else if(ch[i].mark == ) printf("DROP(2)\n");
else if(ch[i].mark == ) printf("POUR(1,2)\n");
else if(ch[i].mark==) printf("POUR(2,1)\n");
}
int main()
{
while(scanf("%d %d %d",&a,&b,&c)!=EOF)
{
stepp=;
memset(vis,,sizeof(vis));
bfs();
if(stepp != )
{
printf("%d\n",stepp);
printff(s);
}
else printf("impossible\n");
}
return ;
}

POJ3414Pots的更多相关文章

  1. poj3414--Pots(bfs,记录路径)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10149   Accepted: 4275   Special J ...

  2. poj3414Pots(倒水BFS)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13231   Accepted: 5553   Special J ...

随机推荐

  1. Qt学习总结-ui篇

    控件设置透明度: QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this); effect->setOpacity(0. ...

  2. linux 下权限问题

    linux 系统下的文件权限 drwxr-xr-x. 2 weblogic weblogic 4096 Dec 26 2012 console-ext-rwxr-xr-x. 1 weblogic we ...

  3. newsstand杂志阅读应用源码ipad版

    一款newsstand iPad杂志阅读应用源码(newsstand在线下载/动态显示等)可以支持在线下载/动态显示等  ,也是一款newsstand iPad杂志阅读应用源码.运行之后,会在iPad ...

  4. bootstrap2.3.2 modal 用href时有缓存

    $('body').on('hidden', '.modal', function () {$(this).removeData('modal');}); 直接在js里加入上面的代码就可以解决缓存问题 ...

  5. Linux C 程序 GTK+图形界面编程(22)

    GTK+图形界面编程 Linux大多是在字符界面,但也可以开发图形界面 目前已经存在多种Linux下开发图形界面的程序开发包:最常用的是Qt和GTK+ Qt是一个跨平台的图形界面开发库,不仅仅支持Li ...

  6. argularJS学习笔记-增删改

    <!doctype html> <html lang="en" ng-app> <head> <meta charset="UT ...

  7. Placeholdem文本域占位符符号标识JavaScript插件

    Placeholdem是文本域占位符符号标识的一个JavaScript插件.占位符的值将逐步删除焦点文字,并在焦点离开逐步恢复. 在线demo:http://placeholdem.jackrugil ...

  8. 如何将Log4Net 日志保存到mongodb数据库之实践

    log4net的大名早有耳闻,一直没真正用过,这次开发APP项目准备在服务端使用log4net. 日志的数据量较大,频繁的写数据库容易影响系统整体性能,所以独立将日志写到mongodb数据库是不错的选 ...

  9. hdu 5720 BestCoder 2nd Anniversary Wool 推理+一维区间的并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5720 题意:有n(n <= 105)个数 ,每个数小于等于 1018:问在给定的[L,R]区间中 ...

  10. CentOS 7.0安装MPlayer

    自带的播放器不管rmvb还是mp4都不能播放,也搜索不到解码器. CentOS7epel装不上所以也没有rpmfusion,所以决定自己编译mplayer 首先是要获取源代码. 首先是主程序的源代码. ...