首页
社区
课程
招聘
[已解决] 求5*5黑白棋盘翻转算法:点击任意棋子,该棋子及上下左右相邻的棋子会改变颜色。白色棋子少于4个即为完成。 100.00雪花
发表于: 2020-11-7 00:48 5595

[已解决] 求5*5黑白棋盘翻转算法:点击任意棋子,该棋子及上下左右相邻的棋子会改变颜色。白色棋子少于4个即为完成。 100.00雪花

2020-11-7 00:48
5595

# 求5*5黑白棋盘翻转算法:点击任意棋子,该棋子及上下左右相邻的棋子会改变颜色。白色棋子少于4个即为完成。

//棋盘如:(黑白完全随机生成)
byte arr[5][5] =
{
{0,1,0,1,0},
{1,0,1,1,0},
{0,1,0,1,0},
{1,1,1,1,0},
{0,0,1,0,0}
}; //0黑1白

 

//点击任意棋子,该棋子及上下左右相邻的棋子会改变颜色。白色棋子少于4个即为完成。(棋盘黑白完全随机生成)

 

//返回点击的索引列表,按照这个列表依次点击即可通关,尽量不超过50次点击。
//如返回:{5,24,1,3}
//如返回:{0,1,2,3,24,5,9,6,5,5}
//无法完成返回空列表
vector<int> GetClickData(int arr[25]); //这2个方式均可,选1
vector<int> GetClickData(int arr[5][5]); //这2个方式均可,选1

 

(棋盘黑白完全随机生成)
参考棋盘1:

参考棋盘2:

 

参考资料:[POJ1753解法]
https://blog.csdn.net/Legendary_/article/details/37722857?locationNum=4&fps=1


[课程]Linux pwn 探索篇!

最后于 2020-11-7 00:51 被梦落编辑 ,原因: 超链接失效
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
需要C++代码或lua代码
2020-11-7 01:13
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
3
不需要什么算法啊,貌似最多23次点击就可以了

void turn(int x, int y, unsigned char arr[5][5])
{
	arr[y][x] ^= 1;

	if (x != 0)
	{
		arr[y][x-1] ^= 1;
	}
	if (x != 4)
	{
		arr[y][x+1] ^= 1;
	}
	if (y != 0)
	{
		arr[y-1][x] ^= 1;
	}
	if (y != 4)
	{
		arr[y+1][x] ^= 1;
	}
}

int solve5(unsigned char arr[5][5], unsigned char *result)
{
	int i,j;
	int steps = 0;
        //从第二行开始遍历,上一行是1则点一下,这样最多点20次可以把前四行都变0
	for (j=1;j<5;j++)
	{
		for (i=0;i<5;i++)
		{
			if (arr[j-1][i])
			{
				turn(i, j, arr);
				result[steps] = j * 5 + i;
				steps++;
			}
		}
	}
	//检查第5行,如果有某位置左右都是1,则该位置点一下,最多把上一行0变1,却把第5行至少2个1变0
	for (i=1;i<4;i++)
	{
		if (arr[4][i-1] && arr[4][i+1])
		{
			turn(i, j, arr);
			result[steps] = j * 5 + i;
			steps++;
		}
	}

	return steps;
}

void test_x5()
{
	unsigned char result[24];
	int steps;
	int i;
	unsigned char arr[5][5] = {
		{0,1,0,1,0},
		{1,0,1,1,0},
		{0,1,0,1,0},
		{1,1,1,1,0},
		{0,0,1,0,0}
	};	//0黑1白

	steps = solve5(arr, result);
	printf("result = {");
	for (i=0;i<steps;i++)
	{
		printf("%d,",result[i]);
	}
	printf("}\n");
}


2020-11-12 09:11
1
雪    币: 8
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

某三?

最后于 2020-12-25 19:41 被CNLouisLiu编辑 ,原因:
2020-12-25 19:40
0
游客
登录 | 注册 方可回帖
返回
//