广搜最短路径变形,(POJ3414)
题目链接:http://poj.org/problem?id=3414
解题报告:
1、每个节点都是一个独立的状态
2、这里的状态转移就是有几种出路,4种:1、倒掉a中的水,2、把a中的水倒到b中去,3、倒掉b 中的水,4、把b中的水倒到a中去
3、每次的步骤记录到str[][]中去
4、搜索最短路径
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue> using namespace std; struct Node
{
int a; ///a杯子里面的水
int b; ///b杯子里面的水
int step; ///到a,b的情况下所用的步数
char str[][]; ///str[i]存有解时,step=i时的操作
}; int A,B,C; ///A,B表示两个杯子的容量,C目标容量
bool mark[][]; ///mark[i][j]表示在两个杯子在i,j的情况是否标记 bool bfs()
{
memset(mark,false,sizeof(mark)); queue<Node>que;
Node p,tmp; p.a=,p.b=,p.step=;
que.push(p);
mark[][]=true; while(!que.empty())
{
p=que.front();
que.pop(); ///搜索到解
if(p.a==C||p.b==C)
{
printf("%d\n",p.step);
for(int i=; i<=p.step; i++)
printf("%s\n",p.str[i]);
return true;
} if(p.a==)
{
tmp=p;
tmp.a=A;///倒满
tmp.step++;
strcpy(tmp.str[tmp.step],"FILL(1)");
if(!mark[tmp.a][tmp.b])
{
mark[tmp.a][tmp.b]=true;
que.push(tmp);
}
}
else if(p.a<=A) ///可以选择倒掉,也可以选择倒到2杯子中去
{
tmp=p;
tmp.a=;///倒掉
tmp.step++;
strcpy(tmp.str[tmp.step],"DROP(1)");
if(!mark[tmp.a][tmp.b])
{
mark[tmp.a][tmp.b]=true;
que.push(tmp);
}
if(p.b<B)
{
tmp=p;
if(tmp.a+tmp.b<=B)
{
tmp.b+=tmp.a;
tmp.a=;
}
else
{
tmp.a=(tmp.b+tmp.a)-B;
tmp.b=B;
}
tmp.step++;
strcpy(tmp.str[tmp.step],"POUR(1,2)");
if(!mark[tmp.a][tmp.b])
{
mark[tmp.a][tmp.b]=true;
que.push(tmp);
}
}
} if(p.b==)
{
tmp=p;
tmp.b=B;///倒满
tmp.step++;
strcpy(tmp.str[tmp.step],"FILL(2)");
if(!mark[tmp.a][tmp.b])
{
mark[tmp.a][tmp.b]=true;
que.push(tmp);
}
}
else if(p.b<=B) ///可以选择倒掉,也可以选择倒到1中
{
tmp=p;
tmp.b=; ///倒掉
tmp.step++;
strcpy(tmp.str[tmp.step],"DROP(2)");
if(!mark[tmp.a][tmp.b])
{
mark[tmp.a][tmp.b]=true;
que.push(tmp);
}
if(p.a<A) ///倒到1中
{
tmp=p;
if(tmp.b+tmp.a<=A)
{
tmp.a+=tmp.b;
tmp.b=;
}
else
{
tmp.b=(tmp.b+tmp.a)-A;
tmp.a=A;
}
tmp.step++;
strcpy(tmp.str[tmp.step],"POUR(2,1)");
if(!mark[tmp.a][tmp.b])
{
mark[tmp.a][tmp.b]=true;
que.push(tmp);
}
}
}
} return false;
} int main()
{
while(scanf("%d%d%d",&A,&B,&C)!=EOF)
{
if(!bfs()) puts("impossible");
}
return ;
}
广搜最短路径变形,(POJ3414)的更多相关文章
- poj3984迷宫问题 广搜+最短路径+模拟队列
转自:http://blog.csdn.net/no_retreats/article/details/8146585 定义一个二维数组: int maze[5][5] = { 0, 1, 0, ...
- 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...
- poj 3984:迷宫问题(广搜,入门题)
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7635 Accepted: 4474 Description ...
- hdu 1242:Rescue(BFS广搜 + 优先队列)
Rescue Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- poj 3026 Borg Maze 最小生成树 + 广搜
点击打开链接 Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7097 Accepted: 2389 ...
- nyoj 523 双向广搜
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=523 #include<iostream> #include<cstd ...
- 解救小哈——bfs广搜
问题描述: 小哈去玩迷宫,结果迷路了,小哼去救小哈.迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物. 问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径 ...
- hdu 1253 胜利大逃亡 (广搜)
题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个 ...
- 69.广搜练习: 最少转弯问题(TURN)
[问题描述] 给出一张地图,这张地图被分为n×m(n,m<=100)个方块,任何一个方块不是平地就是高山.平地可以通过,高山则不能.现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯 ...
随机推荐
- centeros 6.5 网络设置
vi /etc/sysconfig/network-script/ifcfg-eth0 关键点 nat设置中的网关,dhcp设置中起始网络地址跟结束ip地址,选择其中范围的一个即可 service ...
- accept 和 connect API深入 重点accept阻塞和非阻塞问题学习
https://www.cnblogs.com/zhangkele/p/10284234.html
- Django相关的MTV
- 基于MVC模式开发的后台框架
1.ThinkCMF 2.NFine快速开发平台 3.力软快速开发框架 如有好的开发框架希望可以一起交流
- [转]LazyLoad.js及scrollLoading.js
本文转自:http://blog.csdn.net/ning109314/article/details/7042829 目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片):二是自动 ...
- [转]jQuery: get table column/row index remove table column (by column number)
本文转自:http://www.xinotes.org/notes/note/1087/ <!DOCTYPE html><html><head> <title ...
- contiki源码阅读之mmem.c
上次我们说了list,这次我们就借着mmem.c的代码来用一下这个链表. 代码目录是./core/lib/mmem.c 结构体定义如下 struct mmem { struct mmem *next; ...
- CentOS 开机自启动脚本
开机时执行自己的脚本. 1.编写自己的服务脚本 进入系统服务脚本目录: cd /etc/rc.d/init.d/ vi test 内容如下: #!/bin/bash # # chkconfig: - ...
- android 官网访问不了
网上搜到的解决方案,亲测有用.记下来,以备遗忘. 使用管理员权限,修改C:\Windows\System32\Drivers\etc\hosts文件,加入以下内容 173.194.127.7 deve ...
- css 动画 和 响应式布局和兼容性
14.动画 -moz-:火狐, -ms-:IE,-webkit-:谷歌,-o-:欧朋 transform旋转 rotate旋转 scale放大 translate偏移量 skew倾斜度 transfo ...