象棋系列

目录

2象棋(1)16象棋(2)

28象棋(3)

46象棋(4)

61象棋(5)

75象棋(6)

88象棋(7)100(8)141(11)

151象棋(9)

129象棋(10)

112象棋(12)

159象棋(13)

124象棋(14)


2象棋(1)16象棋(2)

2象棋(1)

这个不难,直接给出步骤分解:

16象棋(2) 

其实就是2个 2象棋(1) 放到一起而已,可以独立的解决,黑格子和红格子之间没什么联系

28象棋(3)

满盘马交换

46象棋(4)

这其实就是求皇后的外固集,关于外固数和外固集,点击查看:《棋盘》内固、外固

因为棋盘比较小,所以可以枚举所有的外固集。

代码:

#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列。

61象棋(5)

这其实就是求马的外固集。

关于外固集,以及求解的方法和程序,请点击:马的外固问题

75象棋(6)

这是著名的8皇后问题,详情:內固——N皇 后问题

这里列举一个非常对称的解:

这8个皇后恰好在一个长方形上,不过这8个皇后里面只有最上面的和最下面的是直角顶点,

最左边的和最右边的并不是直角顶点。

88象棋(7)100(8)141(11)

88象棋(7)

这是混合棋子的外固问题。

其他有趣的外固问题: 61象棋(5)、46象棋(4)

答案:

100(8)

规则和上面的一样

只要用2个车控制上面2行和左边2列,剩下的就只是6*6了,这样,就可以利用46象棋(4)里面的结论直接完成了。

141(11)

151象棋(9)

不规则棋盘的马交换

129象棋(10)

这一关,就是要求给出象的内固集。

首先:

整个棋盘可以分成15条斜线,每条斜线上面最多只能放一个子。

但是左下角和右上角的2条线上面都只有一个格子,即2个顶点格子。

这2个格子是互斥的,所以整个棋盘最多只能放14个棋子。

下图说明,14个是可以放得下的:

所以,象的内固数是14。

至于內固集,还有好多:

112象棋(12)

 

这一关要不重复地走遍棋盘,也就是寻找哈密顿链。

在 哈密顿回路、链路 里面,讨论了关于5*5的棋盘上,马的哈密顿链的问题。

这一关是有唯一解的(其他解法无非就是对称的而已)

首先,这8个格子构成的是一个死圈,一旦进入就只能沿着我画的线走,不得退出!所以,这8个格子必定是最后到的8个格子。

然后,剩下的16个格子也是一个哈密顿圈,而且结构非常简单,就是最普通的一个圈。

所以,从最中间的格子跳入这个圈之后,就只能沿着这个圈,将这16个格子跳完,最后进入那8个格子形成的圈。

159象棋(13)

哈密顿回路、链路里面,讨论了关于7*7的棋盘上,马的哈密顿链的问题。

最后得到的图:

根据这个图,可以直接得到哈密顿链。

124象棋(14)

 

3*4的马交换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值