poj1753Flip Game

 /*poj1753:枚举+DFS用一个计数实现数组元素在深搜时起点的变化 较为常规*/

题意:进行若干次变化,每次可把临近的四个变换颜色,最终能使得正面颜色都相同,输出最少的次数

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int nx[5] = {0, 0, -1, 1};
int ny[5] = {-1, 1, 0, 0};
int MIN = 1000;

void dfs(int n, int k, char str[][5])
{
	
	int sum = 0;
	char str1[5][5];
	for(int i = 0;i < 4; i++)
	{
		for(int j = 0;j < 4; j++)
		{
			if(str[i][j] == 'b')
			sum++;
		}
	}
	if(sum == 16 || sum == 0)
	{
		if(k < MIN)
			MIN = k;
		return ;
	}
	if(n == 16)
		return;
	for(int i = 0;i < 4; i++)
		strcpy(str1[i], str[i]);
	dfs(n+1, k, str1);
	int x = n / 4;
	int y = n % 4;
	str1[x][y] = (str1[x][y] == 'b')?'w':'b';
	for(int i = 0; i<4; i++)
	{
		int tx = nx[i] + x;
		int ty = ny[i] + y;
		if(tx>=0&&ty>=0&&tx<=3&&ty<=3)
		{
			str1[tx][ty] = str1[tx][ty] == 'b'?'w':'b';
		}
	}	
	dfs(n+1,k+1,str1);
}
int main()
{
	char str[5][5];
	for(int i = 0;i < 4; i++)
		scanf("%s",str[i]);
	dfs(0, 0, str);
	if(MIN == 1000)
		printf("Impossible\n");
	else
		printf("%d\n",MIN);
	return 0;
}
 隔壁一大神写了一个位运算+BFS解法,可以看看,在此附上链接 http://blog.csdn.net/ltyqljhwcm/article/details/52908742

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值