46象棋(4)

智力游戏

46象棋(4)_第1张图片

46象棋(4)_第2张图片

这其实就是求皇后的外固集,关于外固数和外固集,点击查看:外固——用几个皇后才能控制棋盘
因为棋盘比较小,所以可以枚举所有的外固集。
代码:
#include<iostream>
using namespace std;

int i1, i2, i3, k1, k2, k3;

bool ok()
{
	int sum1 = i1 + k1, sum2 = i2 + k2, sum3 = i3 + k3;
	int d1 = i1 - k1, d2 = i2 - k2, d3 = i3 - k3;
	for (int i = 1; i <= 6; i++)
	{
		if (i == i1 || i == i2 || i == i3)continue;
		for (int j = 1; j <= 6; j++)
		{
			if (j == k1 || j == k2 || j == k3)continue;
			int sum = i + j;
			if (sum == sum1 || sum == sum2 || sum == sum3)continue;
			int d = i - j;
			if (d == d1 || d == d2 || d == d3)continue;
			return false;
		}
	}
	return true;
}

void out()
{
	cout << i1 << "," << k1 << "  " << i2 << "," << k2 << "  " << i3 << "," << k3 << endl;
}

int main()
{
	for (i1 = 1; i1 <= 6; i1++)for (k1 = 1; k1 <= 6; k1++)
	for (i2 = i1; i2 <= 6; i2++)for (k2 = 1; k2 <= 6; k2++)
	for (i3 = i2; i3 <= 6; i3++)for (k3 = 1; k3 <= 6; k3++)
	if (ok())out();
	return 0;
}

输出:
1,1  3,5  5,3
1,6  3,2  5,4
2,3  4,5  6,1
2,4  4,2  6,6
这4种方案其实是一样的,通过旋转可以重合。
下图是2,3  4,5  6,1,即第2行第3列,第4行第5列,第6行第1列。


你可能感兴趣的:(46象棋(4))