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的文件夹 ...
随机推荐
- 目标检测之显著区域检测---国外的一个图像显著区域检测代码及其效果图 saliency region detection
先看几张效果图吧 效果图: 可以直接测试的代码: 头文件: // Saliency.h: interface for the Saliency class.////////////////////// ...
- listview 下拉刷新
http://blog.csdn.net/lancees/article/details/7776853
- 最新wap手机agent
名称 agent 铃声格式 和弦数 数据量 删除 LGE-CU8080 LGE-CU8080/1.0 UP.Browser/4.1.26l UP.Link/5.1.2.9 pmd2.0 40 ...
- duplicate symbols for architeture arm64 linker command failed with code 1(use-c to see invocation)
duplicate symbols for architeture arm64 linker command failed with code 1(use-c to see invocation) ...
- Create an OData v4 Endpoint Using ASP.NET Web API 2.2(使用ASP.NET Web API 2.2创建OData v4端点)
开放数据协议Open Data Protocol(OData)是web的一种数据存取协议,OData通过设置CRUD操作(Create创建.Read读取.Update更新,Delete删除)提供一种统 ...
- 【BZOJ2216】[Poi2011]Lightning Conductor 决策单调性
[BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负 ...
- c#4.5新语法--自动属性和隐式类型
1.自动属性 自动属性是c#中属性定义的两种形式的一种:传统属性定义.自动属性. 1.1 传统属性定义 private int _age; public int ...
- Android Handle,Looper,Message消息机制
尊重原创,转载请标明出处 http://blog.csdn.net/abcdef314159 我们知道在Android中更新UI都是在主线程中,而操作一些耗时的任务则须要在子线程中.假设存在多个 ...
- 3D数学读书笔记——向量运算及在c++上的实现
本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661 ...
- 【bzoj2286】[Sdoi2011]消耗战
虚树入门题: #include<cstdio> #include<cstring> #include<algorithm> #include<ctime> ...