【NOIP 2011】 Mayan游戏
【题目链接】
https://www.luogu.org/problemnew/show/P1312
【算法】
深度优先搜索
【代码】
#include<bits/stdc++.h>
using namespace std; struct info
{
int x,y,op;
} step[]; int i,n,t,x;
int a[][];
bool solved; inline void print()
{
int i;
for (i = ; i <= n; i++) printf("%d %d %d\n",step[i].x - ,step[i].y - ,step[i].op);
}
inline bool check()
{
int i;
for (i = ; i <= ; i++)
{
if (a[i][] != )
return false;
}
return true;
}
inline bool Remove()
{
int i,j,x,y,t;
bool ret = false;
bool d[][];
memset(d,false,sizeof(d));
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
if (a[i][j])
{
for (x = j + ; a[i][j] == a[i][x] && x <= ; x++);
if (x - j >= )
{
for (y = j; y < x; y++)
d[i][y] = true;
ret = true;
}
for (x = i + ; a[i][j] == a[x][j] && x <= ; x++);
if (x - i >= )
{
for (y = i; y < x; y++)
d[y][j] = true;
ret = true;
}
}
}
}
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
if (d[i][j])
a[i][j] = ;
}
}
for (i = ; i <= ; i++)
{
t = ;
for (j = ; j <= ; j++)
{
if (!a[i][j])
{
for (x = j + ; x <= && !a[i][x]; x++);
a[i][j] = a[i][x];
a[i][x] = ;
}
}
}
return ret;
} inline void dfs(int dep)
{
int i,j,x,y;
int b[][];
if (dep > n)
{
if (check())
{
solved = true;
print();
}
return;
}
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
b[i][j] = a[i][j];
}
}
for (i = ; i <= ; i++)
{
for (j = ; j <= ; j++)
{
if (i < && a[i][j] != )
{
if (a[i+][j] != )
{
step[dep] = (info){i,j,};
swap(a[i][j],a[i+][j]);
while (Remove());
dfs(dep+);
if (solved) return;
for (x = ; x <= ; x++)
{
for (y = ; y <= ; y++)
{
a[x][y] = b[x][y];
}
}
} else
{
step[dep] = (info){i,j,};
for (x = j - ; x >= && !a[i+][x]; x--);
a[i+][x+] = a[i][j];
for (x = j; x <= ; x++) a[i][x] = a[i][x+];
while (Remove());
dfs(dep+);
if (solved) return;
for (x = ; x <= ; x++)
{
for (y = ; y <= ; y++)
{
a[x][y] = b[x][y];
}
}
}
}
if (i > && a[i][j] != )
{
if (a[i-][j] == )
{
step[dep] = (info){i,j,-};
for (x = j - ; x >= && !a[i-][x]; x--);
a[i-][x+] = a[i][j];
for (x = j; x <= ; x++) a[i][x] = a[i][x+];
while (Remove());
dfs(dep+);
if (solved) return;
for (x = ; x <= ; x++)
{
for (y = ; y <= ; y++)
{
a[x][y] = b[x][y];
}
}
}
}
}
}
} int main()
{ scanf("%d",&n);
for (i = ; i <= ; i++)
{
t = ;
while (scanf("%d",&x) && x)
a[i][++t] = x;
}
solved = false;
dfs();
if (!solved) printf("-1\n"); return ; }
【NOIP 2011】 Mayan游戏的更多相关文章
- NOIp 2011 mayan游戏 搜索
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- [NOIp 2011]Mayan游戏
Description Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏 ...
- NOIP 2011 Mayan游戏 大暴搜
题目链接:https://www.luogu.org/problemnew/show/P1312 我的第一篇题解!! 当然感谢ZAGER 的提示,他的链接https://www.cnblogs.com ...
- 洛谷 P1312 [ NOIP 2011 ] Mayan游戏 —— 搜索+模拟
题目:https://www.luogu.org/problemnew/show/P1312 还是不擅长这种题,所以参考了一下TJ: 其实也很好搜,按字典序,先搜右移,再搜左移: 不交换相同颜色的两个 ...
- noip提高组2011 Mayan游戏
Mayan游戏 描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.**游戏通关 ...
- ⌈洛谷1312⌋⌈NOIP提高组2011⌋Mayan游戏【搜索】
感想 真的,感觉这道题目好坑爹,我这个蒟蒻调了好几个世纪才调出来. 重构代码千万遍,依旧只有-1输出. 正解 非常明显的一道搜索题目. 每一次记录上一级的状态,这样实现比较不容易出错. 然后考虑剪枝: ...
- NOIP 2011 Day 1
NOIP 2011 Day 1 tags: NOIP 搜索 categories: 信息学竞赛 总结 铺地毯 选择客栈 Mayan游戏 铺地毯 Solution 因为只会询问一个点被谁覆盖, 而且后面 ...
- [Luogu 1312] noip11 Mayan游戏
[Luogu 1312] noip11 Mayan游戏 Problem: Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...
- 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
- NOIP2011 Mayan游戏
3 Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上 ...
随机推荐
- 分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别
1.分类的概念 分类是为了扩展系统类的方法而产生的一种方式,其作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法. 如何创建一个分类?↓↓ ()Cmd+N, ...
- sphinx在windows下的简单安装与使用
1.下载地址 http://sphinxsearch.com/downloads/release/,我这里下的是“Win64 binaries w/MySQL+PgSQL+libstemmer+id6 ...
- Percona Xtrabackup导出/导入单表
默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项.而使用Xtrabackup工具可以实现此种功能,不过,此 ...
- 安卓使用ImageView显示OpenCV-Mat
Android 的Application-native调试暂时还只能进行主线程调试,在GDB里面,运行于子线程的OpenCv数据处理过程不能直接调试,OPenCV-Native函数 public ...
- eclipse中导入maven项目:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.proje
org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter) 解决方法为:更新eclipse中的maven插件 1.help ...
- 25-Ubuntu-文件和目录命令-其他命令-重定向
重定向 Linux允许将命令执行结果重定向到一个文件. 将本应显示到终端上的内容输出或追加到指定文件中. 重定向命令 含义 > 表示输出,会覆盖原有文件. >> 表示追加,会将内容追 ...
- 【转载】JSP详解(四大作用域九大内置对象等)
前面讲解了Servlet,了解了Servlet的继承结构,生命周期等,并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解,但是我们会发现在Servlet中编 ...
- eas之获取当前登陆信息
public void getSystemInfo() { // SysContext工具类可获取当前登陆用户的信息,可根据需要进行调用. // 举两例如下: ...
- vfs:结构体对象
VFS结构体 super_block 存储一个已安装的文件系统的控制信息,代表一个已安装的文件系统:每次一个实际的文件系统被安装时, 内核会从磁盘的特定位置读取一些控制信息来填充内存中的超级块对象.一 ...
- [Ynoi2016]镜中的昆虫
题目大意: 给定一个序列,有2个操作: 1. 区间覆盖.2. 区间数颜色. 解题思路: 珂朵莉树+树套树. 看到区间覆盖当然想到珂朵莉树然而这是Ynoi 所以我们得优化掉珂朵莉树那个暴力过程. 考虑对 ...