NOIP2011 Mayan游戏(搜索)

第一反应是搜索题,想了一下如果用BFS的话,由于状态过多,可能超内存,因此我用的DFS。

这里我们讨论一下剪枝条件:

如果当前状态有一种颜色的数量小于3,那么这种颜色就无法被消除,因此我们可以提前退出迭代。

如果两个连着的方块颜色是相同的话,我们不用交换。

如果两个非空的方块交换,我们只用考虑左边那个方块右移,而不用考虑右边方块左移的情况,这样就能做到右移优先。

如果一个方块是空的,它的右边非空,我们就只用考虑它右边的方块左移,当枚举到它右边方块的时候也不需要再考虑左移的情况。


注意下落清除方块的时候要写成循环形式,因为清除方块以后,下落形成的新图形可能又出现了能清除的方块。

下面是我第一次写的下落的程序,有一个BUG,如果上方多个方块连在一起,而最下面方块的下面是空的,根据我的最先写的程序,只有最下面的一个方块会往下掉,因此我们要一列一列的枚举,把目标状态先求出来

void drop()
{
	for(int x = 0; x < 5; x++)
		for(int y = 6; y >= 1; y--)
			if(st[x][y] != 0&&st[x][y-1] == 0) 
				swa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值