贴一发自己写的手写队列…..

#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+[手写队列])的更多相关文章

  1. 手写队列以及stl中队列的使用

    一,手写队列. struct queue { ; ,rear=,a[maxn]; void push(int x) { a[++rear]=x; } void pop() { first++; } i ...

  2. 三 基于Java动态数组手写队列

    手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...

  3. POJ-3984-迷宫问题-BFS(广搜)-手写队列

    题目链接:id=3984">http://poj.org/problem? id=3984 这个本来是个模板题,可是老师要去不能用STL里的queue,得自己手写解决.ORZ....看 ...

  4. POJ 3984 迷宫问题【BFS/路径记录/手写队列】

    迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31428 Accepted: 18000 Description 定义 ...

  5. python 手写队列

    #encoding=utf8 class MQueue: def __init__(self): self.data = [] def get(self): if self.data.__len__( ...

  6. 教你如何使用Java手写一个基于链表的队列

    在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...

  7. 手写阻塞队列(Condition实现)

    自己实现阻塞队列的话可以采用Object下的wait和notify方法,也可以使用Lock锁提供的Condition来实现,本文就是自己手撸的一个简单的阻塞队列,部分借鉴了JDK的源码.Ps:最近看面 ...

  8. 用过消息队列?Kafka?能否手写一个消息队列?懵

    是否有同样的经历?面试官问你做过啥项目,我一顿胡侃,项目利用到了消息队列,kafka,rocketMQ等等. 好的,那请开始你的表演,面试官递过一支笔:给我手写一个消息队列!!WHAT? 为了大家遇到 ...

  9. 将本地图片数据制作成内存对象数据集|tensorflow|手写数字制作成内存对象数据集|tf队列|线程

      样本说明: tensorflow经典实例之手写数字识别.MNIST数据集. 数据集dir名称 每个文件夹代表一个标签label,每个label中有820个手写数字的图片 标签label为0的文件夹 ...

随机推荐

  1. java线程中断[interrupt()函数] (转载)

    一个正常的线程中断: 从运行到真正的结束,应该有三个阶段: 正常运行. 处理结束前的工作,也就是准备结束. 结束退出. Java曾经提供过抢占式限制中断,但问题多多,例如的Thread.stop.另一 ...

  2. NVIDIA GPU架构与原理分析(一)——GPU简介与主流Fermi、Kepler架构GPU概述

    1 GPU简介 图形处理单元GPU英文全称Graphic Processing Unit,GPU是相对于CPU的一个概念,NVIDIA公司在1999年发布GeForce256图形处理芯片时首先提出GP ...

  3. 【BZOJ1042】[HAOI2008]硬币购物 容斥

    [BZOJ10492][HAOI2008]硬币购物 Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值 ...

  4. EasyIPCamera实现的桌面采集直播用于课堂、会议、展销同屏等应用

    本文转自博客:http://blog.csdn.net/jinlong0603/article/details/56664233 Android同屏直播 在Android上除了获取摄像头数据为Easy ...

  5. 【Effective C++】资源管理

    资源:动态分配的内存.文件描述器.互斥锁.图形界面中的字型与笔刷.数据库连接以及网络sockets等,无论哪一种资源,重要的是,当你不再使用它时,必须将它还给系统. 条款13:以对象管理资源 当我们向 ...

  6. java URI 编码解码

    import java.io.UnsupportedEncodingException; /** * url转码.解码 */ public class UrlUtil { private final ...

  7. JavaScript学习第四天

    1.自定义属性,使用好索引值 例子: 下面有一段js代码: <script> window.onload = function(){ var oBtn = document.getElem ...

  8. POJ2389 —— 高精度乘法

    直接上代码了: #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib& ...

  9. break和continue 都是指的最接近的内层循环

    break和continue 都是指的最接近的内层循环

  10. NSMutableURLRequest,在POST方式下传递参数

    1. [代码][C/C++]代码         NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];     NSUs ...