POJ3414(BFS+[手写队列])
贴一发自己写的手写队列…..
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <queue>
#include <set>
#include <stack>
#include <algorithm>
using namespace std;
#define PI acos(-1.0)
#define INF 0x7fffffff
#define N 1010
struct asd
{
int a,b;
int flag;
int step;
} q[N];
int pre[N];
int vis[N][N];
int head,rail;
void pri()
{
printf("impossible\n");
}
void print(int x)
{
int t;
t=pre[x];
if(t==0)
{
if(q[x].flag==0)
{
printf("FILL(1)\n");
}
else if(q[x].flag==1)
{
printf("FILL(2)\n");
}
else if(q[x].flag==2)
{
printf("DROP(1)\n");
}
else if(q[x].flag==3)
{
printf("DROP(2)\n");
}
else if(q[x].flag==4)
{
printf("POUR(2,1)\n");
}
else if(q[x].flag==5)
{
printf("POUR(1,2)\n");
}
return;
}
else
{
print(t);
}
if(q[x].flag==0)
{
printf("FILL(1)\n");
}
else if(q[x].flag==1)
{
printf("FILL(2)\n");
}
else if(q[x].flag==2)
{
printf("DROP(1)\n");
}
else if(q[x].flag==3)
{
printf("DROP(2)\n");
}
else if(q[x].flag==4)
{
printf("POUR(2,1)\n");
}
else if(q[x].flag==5)
{
printf("POUR(1,2)\n");
}
}
void bfs(int n,int m,int c)
{
memset(vis,0,sizeof(vis));
head=0;
rail=1;
q[0].a=0;
q[0].b=0;
q[0].flag=-1;
q[0].step=0;
vis[0][0]=1;
pre[0]=-1;
while(head<rail)
{
//printf("%d\n",head);
int x=q[head].a;
int y=q[head].b;
if(x==c||y==c)
{
printf("%d\n",q[head].step);
print(head);
return;
}
for(int i=0; i<6; i++)
{
if(i==0)
{
q[rail].a=n;
q[rail].b=q[head].b;
q[rail].flag=0;
}
else if(i==1)
{
q[rail].a=q[head].a;
q[rail].b=m;
q[rail].flag=1;
}
else if(i==2)
{
q[rail].a=0;
q[rail].b=q[head].b;
q[rail].flag=2;
}
else if(i==3)
{
q[rail].a=q[head].a;
q[rail].b=0;
q[rail].flag=3;
}
else if(i==4)
{
// printf("aaa\n");
if((q[head].b+q[head].a)>=n)
{
q[rail].a=n;
q[rail].b=q[head].b-(n-q[head].a);
q[rail].flag=4;
}
else if((q[head].b+q[head].a)<n)
{
q[rail].a=q[head].a+q[head].b;
q[rail].b=0;
q[rail].flag=4;
}
// printf("%d %d\n",q[rail].a,q[rail].b);
}
else if(i==5)
{
if((q[head].a+q[head].b)>=m)
{
q[rail].a=q[head].a-(m-q[head].b);
q[rail].b=m;
q[rail].flag=5;
}
else if((q[head].a+q[head].b)<m)
{
q[rail].a=0;
q[rail].b=q[head].b+q[head].a;
q[rail].flag=5;
}
}
//printf("%d %d\n",q[rail].a,q[rail].b);
if(vis[q[rail].a][q[rail].b])
continue;
vis[q[rail].a][q[rail].b]=1;
q[rail].step=q[head].step+1;
pre[rail]=head;
rail++;
if(q[rail].b==c||q[rail].a==c)
{
//printf("aaa\n");
printf("%d\n",q[head].step+1);
print(rail);
return;
}
}
head++;
}
pri();
return;
}
int main()
{
int n,m,c;
while(~scanf("%d%d%d",&n,&m,&c))
{
// printf("%d %d %d\n",n,m,c);
bfs(n,m,c);
}
return 0;
}
POJ3414(BFS+[手写队列])的更多相关文章
- 手写队列以及stl中队列的使用
一,手写队列. struct queue { ; ,rear=,a[maxn]; void push(int x) { a[++rear]=x; } void pop() { first++; } i ...
- 三 基于Java动态数组手写队列
手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...
- POJ-3984-迷宫问题-BFS(广搜)-手写队列
题目链接:id=3984">http://poj.org/problem? id=3984 这个本来是个模板题,可是老师要去不能用STL里的queue,得自己手写解决.ORZ....看 ...
- POJ 3984 迷宫问题【BFS/路径记录/手写队列】
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31428 Accepted: 18000 Description 定义 ...
- python 手写队列
#encoding=utf8 class MQueue: def __init__(self): self.data = [] def get(self): if self.data.__len__( ...
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
- 手写阻塞队列(Condition实现)
自己实现阻塞队列的话可以采用Object下的wait和notify方法,也可以使用Lock锁提供的Condition来实现,本文就是自己手撸的一个简单的阻塞队列,部分借鉴了JDK的源码.Ps:最近看面 ...
- 用过消息队列?Kafka?能否手写一个消息队列?懵
是否有同样的经历?面试官问你做过啥项目,我一顿胡侃,项目利用到了消息队列,kafka,rocketMQ等等. 好的,那请开始你的表演,面试官递过一支笔:给我手写一个消息队列!!WHAT? 为了大家遇到 ...
- 将本地图片数据制作成内存对象数据集|tensorflow|手写数字制作成内存对象数据集|tf队列|线程
样本说明: tensorflow经典实例之手写数字识别.MNIST数据集. 数据集dir名称 每个文件夹代表一个标签label,每个label中有820个手写数字的图片 标签label为0的文件夹 ...
随机推荐
- 2016/07/07 PHP的线程安全与非线程安全版本的区别
Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍. ...
- EasyDarwin Streaming Server对Task的调用方法
我们在EasyDarwin流媒体服务器的二次开发过程中,经常会需要定义自己的Task类,例如在EasyDarwin中,RTSPSessioin.HTTPSession.RTCPTask等,都是Task ...
- eclipse中怎么删除重复的console
eclipse中不同的应用会开启不同的console,所以并不是重复. 如图: Terminate标志/操作按钮,可以停止当前的执行,以及标志此Console是Terminated状态: Remove ...
- [JAVA · 0基础]:16.经常使用类
基本类型包装 为什么须要包装类? JAVA并非纯面向对象的语言.Java语言是一个面向对象的语言.可是Java中的基本数据类型却是不面向对象的.可是我们在实际使用中常常须要将基本数据转化成对象,便于操 ...
- 【LeetCode】Maximum Depth of Binary Tree
http://oj.leetcode.com/problems/maximum-depth-of-binary-tree/ public class Solution { public int max ...
- Xcode使用的一些小技巧,值得一看。
有时我们需要对一个已有项目进行重构,改进设计,提高代码质量.以下几个Xcode 4中的功能,会使重构的工作变得轻松很多. 1.打开项目我的项目是Xcode3.x中编辑的,在用Xcode 4 打开时出现 ...
- HDU4549 M斐波那契数列 —— 斐波那契、费马小定理、矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-4549 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Li ...
- codeforces B. Polo the Penguin and Matrix 解题报告
题目链接:http://codeforces.com/problemset/problem/289/B 题目意思:给出一个 n 行 m 列的矩阵和数值 d .通过对矩阵里面的数进行 + d 或者 - ...
- easyui-tabs 在ie8下基于iframe嵌套页面加载成功后切换空白问题
这是一个很坑的问题,由于项目必须支持ie8的情况下,产生了这个问题.在我进行逐步对比的分析过后,终于发现了原因所在:
- 一:MetaMq集群中单个节点的安装配置示意图
MetaMQ集群一个节点的安装和配置示意图[1]:下载metaMQ的安装包