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

#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学习之路与大家分享

    这是我四年以前总结的JAVA学习之路,希望对初学者或想从事JAVA开发的人有帮助. 本人是软件工程专业出身,先后学过C.C++.JAVA.VB.delphi等等开发语言以及网络相关管理技术.哎,好久不 ...

  2. file descriptor 0 1 2 一切皆文件 stdout stderr stdin /dev/null 沉默是金 pipes

    $>emtry_or_create_a_file.f $ll>>append_a_file.f standard output input error $ls -l /usr/bin ...

  3. Thumbelina,摘自iOS应用Snow White and more stories

    Once upon a time there was a woman who wanted to have a child. 从前,有个想要个孩子的女人. A witch heard her wish ...

  4. Linux常用命令——持续更新(2018-05-09)

    此命令默认是在centos环境下执行,除非特殊标明. 1.查看ip: ifconfig 2.创建指定用户并分配到某个组:创建用户user并分配到root组 useradd -g root user 3 ...

  5. 增删改查,连接数据库UsersDao

    package com.abc.dao; import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.Re ...

  6. vim编辑makefile时临时不展开tab为空格

    可以先敲ctrl-v组合键,再敲tab键,这样就不会被转换成空格了. 给自己的备忘!

  7. 《数学之美》第15章 矩阵计算和文本处理中两个分类问题——SVD分解的应用

    转载请注明原地址:http://www.cnblogs.com/connorzx/p/4170047.html 提出原因 基于余弦定理对文本和词汇的处理需要迭代的次数太多(具体见14章笔记),为了找到 ...

  8. 关于Javascript中声明变量、函数的笔记

    一.概念 1.变量声明 在JavaScript中,变量一般通过var关键字(隐式声明,let关键字声明除外)进行声明,如下通过var关键字声明a,b,c三个变量(并给其中的a赋值): var a=1, ...

  9. cassandra 存储二进制data

    Blob type The Cassandra blob data type represents a constant hexadecimal number defined as 0[xX](hex ...

  10. Linux_基于Docker快速搭建个人博客网站

    时间:2017年04月28日星期五 说明:基于docker技术,使用jpress开源框架搭建个人博客网站.特别感谢jpress开源项目.系统版本:CentOS 7.2-64bit. 步骤一:准备Doc ...