有趣的题面

超有趣的dfs大模拟,码了巨久,卡时过了此题qaq

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,mp[][][];
struct answer{int x,y,op;}re[];
bool arr[][];
inline void fall(int now)
{
int i,j,sz;
for(i=;i<=;i++)
{
sz=;
for(j=;j<=;j++)
{
if(mp[now][i][j]) mp[now][i][sz++]=mp[now][i][j];
}while(sz<) mp[now][i][sz++]=;
}
}//顾名思义模拟方块掉落
inline void chag(int now)
{
int i,j; bool bo=;
for(bo=;bo;)
{
bo=; fall(now);
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(mp[now][i][j])
{
if(i<)
{
if(mp[now][i][j]==mp[now][i+][j]&&mp[now][i][j]==mp[now][i+][j])
{
bo=arr[i][j]=arr[i+][j]=arr[i+][j]=;
}
}
if(j<)
{
if(mp[now][i][j]==mp[now][i][j+]&&mp[now][i][j]==mp[now][i][j+])
{
bo=arr[i][j]=arr[i][j+]=arr[i][j+]=;
}
}
}
}
}
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(arr[i][j]) arr[i][j]=mp[now][i][j]=;
}
}
}
}//找到所有连续3个的方块删去,就是这么丑qaq
inline bool dfs(int now)
{
int i,j; for(i=;i<=;i++)for(j=;j<=;j++)mp[now][i][j]=mp[now-][i][j]; chag(now);
if(now==n+)
{
for(i=;i<=;i++)if(mp[now][i][])return false; return true;
}
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
if(mp[now][i][j])
{
if(i<&&mp[now][i][j]!=mp[now][i+][j])//交换相同的毫无意义
{
re[now].x=i; re[now].y=j; re[now].op=;
swap(mp[now][i][j],mp[now][i+][j]);
if(dfs(now+))return true;//暴力搜索
swap(mp[now][i][j],mp[now][i+][j]);//回溯
}
if(i&&!mp[now][i-][j])//如果上一个有的话显然是向右交换字典序更小啊
{
re[now].x=i; re[now].y=j; re[now].op=-;
swap(mp[now][i][j],mp[now][i-][j]);
if(dfs(now+))return true;//搜搜搜
swap(mp[now][i][j],mp[now][i-][j]);
}
}
}
}return false;
}
int main()
{
int i,j,x,bo; scanf("%d",&n); memset(arr,,sizeof arr);
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
scanf("%d",&x); if(!x)break; mp[][i][j]=x;
}
}bo=dfs(); if(!bo)return *printf("-1\n");
for(i=;i<=n;i++)printf("%d %d %d\n",re[i].x,re[i].y,re[i].op);
}

luogu1312的更多相关文章

  1. luogu1312 Mayan游戏 剪枝

    题目大意 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个77 行\times 5×5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

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

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

随机推荐

  1. Python2.7-weakref

    weakref 模块,允许创建对象的弱引用,被弱引用的对象其引用计数不变,对象的引用计数为0时就会被垃圾清理机制释放内存空间,此时对其的弱引用也会失效.在对象会被交叉引用,需要释放内存空间时常用. 模 ...

  2. ps工具快捷键

    1.覆盖图片原先文件--- 自由转换 快捷键 ctrl+t 1)首先选择一个背景色 点击或者ctrl+t 处于自由切换状态  可以进行上下拉伸 回车即可. 这样就覆盖了文件,且背景色和我们之前的一样. ...

  3. JAVA框架 Spring 依赖注入

    一:介绍 情景:我们在给程序分层的时候:web层.业务层.持久层,各个层之间会有依赖.比如说:业务层和持久层,业务层的代码在调用持久层的时候,传统方式:new 持久层类. 进而进行调用,这种方式会导致 ...

  4. 自己设计一个日期类,可以输入年月日作为构造时的参数,如果不使用参数,则设定为1900年1月1日;编写一个方法equals判断两个日期是否相等;另一个方法compareTo可以进行日期之间的比较,返回两个日期之间相差的天数.

    import java.util.*; import java.lang.Math; class Date1{ private int year; private int month; private ...

  5. Android 给CheckBox设置背景

    一般来说我们给控件(Button,LinearLayout,ImageView,TextView等)设这背景的时候只需要设置这些控件的android:background即可, 但是在给CheckBo ...

  6. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结

    1. 前言 bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,这个IP核基本未变,可见这个IP核的设计是相当成熟的.本文所讲述的内容属于这个IP核的一部分,掌握了本文所讲内容,就可以 ...

  7. React等开发工具记录

    React Native :React 起源于 Facebook 的内部项目,结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生 ...

  8. ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值

    用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器.最近才发现IActionFilter的OnActionExecuting方法,甚 ...

  9. HTML5 本地存储实现购物车功能

    在家休陪产假,无聊,看自己以前的项目,突然发现之前写的购物车都是用数据库实现的,数据库实现购物车原则上没什么问题,但是需要和数据库交互,这样无意之间降低了程序的效率.今天突发奇想,如果能用HTML5本 ...

  10. 微信小程序之自定义组件的应用

    小程序支持自定义组件,下面是一个简单的购物车组件,实现的效果如图: 效果图 创建组件 在根目录创建components目录,然后创建计数组件 count 如图: 组件内容 <!--compone ...