【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 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上 ...
随机推荐
- Android 解决小米手机Android Studio安装app 报错的问题It is possible that this issue is resolved by uninstalling an existi
Android Studio升级到2.3版本之后,小米手机MIUI8不能运行Android Studio程序,报如下错误: Installation failed with message Faile ...
- USB 接口探测分类
USB 接口探测分类 SDP (Standand Downstream Port) 标准下行接口 标准USB都支持的接口 这种端口的D+和D-线上具有15kΩ下拉电阻.限流值如上讨论:挂起时为2.5m ...
- for 循环 乘法口诀表
用for循环写乘法口诀表: for(var i = 1; i <= 9; i++) { var c=''; for(var x = 1; x <= i; x++) { c=c+x+' ...
- Oracle数据库的导入和导出
Oracle数据库的导入和导出,是一项重要的的技术活,不但解决了数据库的导入导出,更方便快捷的获得数据. 使用imp和exp导入导出数据 使用exp导出数据 存放目录为\ORACLE_HOME\BIN ...
- 在jboss上部署web应用
1.JBoss介绍 JBoss完全实现了J2EE的服务栈: EJB (Enterprise JavaBeans) JMS (Java Message Service) JTS/JTA (Java Tr ...
- 微信jssdk图片上传
一.html页面如下: <div class="weui-cell"> <div class="weui-cell__hd"></ ...
- PDF怎么替换页面,教你一招秒实现
PDF格式是在办公中比较常用的文件格式之一,虽然很好用,也很容易携带,但也容易出现一个问题,当你想要对PDF文件操作或者修改的时候,才发现PDF文件不是那么容易就能进行编辑和修改的,特别是需要对PDF ...
- H5-data属性的一个问题
关于前端存数据的问题,前面写过一个博客:前端页面存取数据 看个例子: <!DOCTYPE html> <html lang="en"> <head&g ...
- JavaScript中Null和Undefined的区别
Null: null是js中的关键字,表示空值,null可以看作是object的一个特殊的值,如果一个object值为空,表示这个对象不是有效对象. Undefined: undefined不是js中 ...
- bos开发时,测试卡在登录界面解决
在BOS工作空间工程路径下新建sp文件夹,如在E:\bosworkspace8.2\Project_0\lib 新建sp文件夹E:\bosworkspace8.2\Project_0\lib\sp.然 ...