深搜+模拟

需要剪枝:同一移动向右移了就不需要向左移了

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int n,bo[6][8],tot,a[6][6][8],b[6][3];
bool boo;
int print(int x){
printf("\n");
for(int i=0;i<5;i++){
for(int j=0;j<7;j++)
printf("%d ",a[x][i][j]);
printf("\n");
}
printf("\n");
return 0;
}
bool boooo[5]={0};
void fall(int step){
for(int i=0;i<5;i++){
int bottom=0;
while(a[step][i][bottom]) bottom++;
if(bottom>=7) continue;
for(int j=bottom;j<7;j++){
if(a[step][i][j]){
a[step][i][bottom++]=a[step][i][j];
a[step][i][j]=0;
}
}
}
}
bool wipe(int step){
boo=0; tot++;
for(int i=0;i<5;i++)
for(int j=2;j<7;j++){
if(!a[step][i][j]) break;
if(a[step][i][j]==a[step][i][j-1]&&a[step][i][j]==a[step][i][j-2])
bo[i][j]=bo[i][j-1]=bo[i][j-2]=tot;
}
for(int i=0;i<7;i++)
for(int j=2;j<5;j++){
if(!a[step][j][i]) break;
if(a[step][j][i]==a[step][j-1][i]&&a[step][j][i]==a[step][j-2][i])
bo[j][i]=bo[j-1][i]=bo[j-2][i]=tot;
}
for(int i=0;i<5;i++)
for(int j=0;j<7;j++)
if(bo[i][j]==tot){
a[step][i][j]=0;
boo=1;
}
return boo;
}
void move(int step,int x,int y,int pos){
swap(a[step][x][y],a[step][x+pos][y]);
fall(step);
while(wipe(step)==1)
fall(step);
}
void dfs(int step,int x,int y,int pos){
if(step>n) return;
if(step!=0){
for(int i=0;i<5;i++)
for(int j=0;j<7;j++)
a[step][i][j]=a[step-1][i][j];
move(step,x,y,pos);
b[step][0]=x;
b[step][1]=y;
b[step][2]=pos;
}
boo=0;
bool vis[6][8]={0};
for(int i=0;i<5;i++)
for(int j=0;j<7;j++)
if(a[step][i][j]){
boo=1;
if(i!=4){
dfs(step+1,i,j,1);
vis[i+1][j]=1;
}
if(i&&(!vis[i][j]))dfs(step+1,i,j,-1);
}
if(boo==0){
for(int i=1;i<=step;i++)
printf("%d %d %d\n",b[i][0],b[i][1],b[i][2]);
exit(0);
}
}
int main()
{
freopen("mayan.in","r",stdin);
freopen("mayan.out","w",stdout);
scanf("%d",&n);
for(int i=0;i<5;i++){
int j=0;
while(scanf("%d",&a[0][i][j++])==1&&a[0][i][j-1]!=0){}
}
dfs(0,0,0,0);
printf("-1\n");
return 0;
}

noip2011 玛雅游戏 大模拟的更多相关文章

  1. NOIP2011玛雅游戏

    闲的没事干,出来写一下早两天刷的一道搜索题NOIP2011玛雅游戏,其实这道题还是比较水的,虽然看起来可能有点复杂. 方法很简单粗暴,直接根据规则模拟就行. 话不多说直接上代码(关键操作在注释中有提到 ...

  2. [NOIP2011]玛雅游戏

    闲的没事干,出来写一下早两天刷的一道搜索题NOIP2011玛雅游戏,其实这道题还是比较水的,虽然看起来可能有点复杂. 方法很简单粗暴,直接根据规则模拟就行. 话不多说直接上代码(关键操作在注释中有提到 ...

  3. [COGS 622] [NOIP2011] 玛雅游戏 模拟

    整个模拟的关键除了打出来就是一个剪枝:对于两个左右相邻的块你不用再走←,因为走→是等效的 #include<cstdio> #include<cstring> #include ...

  4. Noip2011 Mayan游戏 搜索 + 模拟 + 剪枝

    写了一下午,终于AC了. 由于n<=5, 所以不需要太多的剪枝和技巧也能过.可以将操作后的消方块和下落和剪枝函数写到一个结构体中,这样会减少调试难度,更加简洁. 可以采用如下剪枝: 1. 如果当 ...

  5. 玛雅游戏[NOIP2011]

    题目描述 Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  6. Luogu 1312 【NOIP2011】玛雅游戏 (搜索)

    Luogu 1312 [NOIP2011]玛雅游戏 (搜索) Description Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空 ...

  7. [noip2011 luogu1312] Mayan游戏(模拟)

    原题:传送门 大模拟- 两个剪枝: 1.如果左边不为空就不往左边走(因为一定不如左边的移到右边优) 2.如果相邻两颜色相同不需移动 当然也有别的小剪枝(我没写)比如如果当前某一颜色剩余块数满足1< ...

  8. [NOIP2011] mayan游戏(搜索+剪枝)

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  9. Bzoj1972: [Sdoi2010]猪国杀 题解(大模拟+耐心+细心)

    猪国杀 - 可读版本 https://mubu.com/doc/2707815814591da4 题目可真长,读题都要一个小时. 这道题很多人都说不可做,耗时间,代码量大,于是,本着不做死就不会死的精 ...

随机推荐

  1. shim & polyfill

    在JavaScript中,经常提到shim和polyfill,polyfill是shim的一种.shim 是将不同 api 封装成一种,比如 jQuery 的 $.ajax 封装了 XMLHttpRe ...

  2. 跨JavaScript对象作用域调用setInterval方法

    跨JavaScript对象作用域调用setInterval方法: var id = window.setInterval(function() {foofunc.call(this);}, 200);

  3. balanced binary tree(判断是否是平衡二叉树)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  4. java原子操作

    一.何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位.计算机中的Atomic是指不能分割成若干部分的意思.如果一段代码被认为是Atomic,则表示这段代码在执行过程中 ...

  5. java死锁小例子

    package cn.com.io.threadDemo.ThreadSyn; /** * 通过两个属性值创建死锁 * 本程序通过两个线程各自锁定一个属性值,这样两个线程都无法结束,造成死锁 * @a ...

  6. andorid下从相册选取/拍照选取一张相片并剪切

    http://www.2cto.com/kf/201401/270144.html 在Android编程中,从相册选取或是拍照选取一张照片然后对其进行剪切的需求非常的多 之前的一篇文章只说到如何从相册 ...

  7. Ocelot中文文档-Qos服务质量

    目前Ocelot支持一种QoS功能. 如果您希望在请求向下游服务时使用断路,则可以在ReRoute中进行设置. 这个功能使用了一个名为Polly的.NET库,这个库很棒,在这里可以找到它. 添加如下配 ...

  8. 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个

    从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Djang ...

  9. 高性能网络IO模型

    同步阻塞式IO开发简单,但在处理IO密集的并发任务时,非常浪费CPU资源,性能低:并且,当一个进程(线程)含有多个套接字上时,同步阻塞式IO会带来问题:因为同步阻塞式IO只支持进程(线程)阻塞在一个套 ...

  10. 16.git命令汇总