【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 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上 ... 
随机推荐
- Intellij IDEA 2018.3.5版安装详解及破解
			几个参考链接: 软件下载链接:https://www.jetbrains.com/idea/ 破解补丁:链接:https://pan.baidu.com/s/1xUbil5jq_DyTbXJWUUsM ... 
- C#使用wkhtmltopdf,把HTML生成PDF(包含分页)
			最近花了2天多的时间终于把HTML生成PDF弄好了.步骤如下: 1.首先是技术选型.看了好多都是收费的就不考虑了. 免费的有: jsPDF(前端生成,清晰度不高,生成比较慢) iText(严格要求ht ... 
- 【SQL】BETWEEN操作符
			BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围. 操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围.这些值可以是数值.文本或者日期. 注意: ... 
- handyJson的技术内核
			1.swift对象内存模型: 2.指针操作: 3.协议.泛型.扩展: 4.kvc: 1是所有实现的基础,没有内存对象(类)模型,后面的一切都我从谈起. 在1的基础上使用2进行对象模型信息的提取和转换. ... 
- fileupload 上传控件
			<div> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:But ... 
- 继承(day09)
			二十一 继承(Inheritance) ... 子类的构造函数和析构函数 5.1 子类的构造函数 )如果子类构造函数没有显式指明基类子对象的初始化方式,那么该子对象将以无参方式被初始化. )如果希望基 ... 
- POJ2431-Expedition【优先队列+贪心】
			题目大意:卡车每走一公里就消耗一单位的汽油,初始时给你p单位油,你要到达l距离的终点.其中路上有n个补给点可以加油,并且油箱容量无限大,问你最少可以停车几次. 思路:因为油箱无限大,所以我们可以这么认 ... 
- python爬虫05 | 年轻人,不会正则表达式你睡得着觉?有点出息没有?
			现在 你已经会使用 python 模拟浏览器 进行一些 Http 的请求了 那么请求完之后 服务器返回给我们一堆源代码 我们可不是啥都要的啊 我们是有原则的 我们想要的东西 怎么能一股脑的啥都往自己兜 ... 
- JavaSE 学习笔记之接 口(六)
			接 口: 1:是用关键字interface定义的. 2:接口中包含的成员,最常见的有全局常量.抽象方法. 注意:接口中的成员都有固定的修饰符. 成员变量:public static final ... 
- Redis参数
			phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: Redis::__construct构造函数$redis ... 
