国际象棋,马 极小满覆盖。。。。求解

foreverwht 2009-05-07 01:48:19
最近碰到一个题目,与马的遍历类似。。但不太懂 有能吧程序主体做出来给我看的吗。。谢谢。。。。。题目如下:

在8*8国际象棋棋盘上。。。如果放置若干个马后,使得整个棋盘的任意控位置上所放置的棋子都能被马吃掉,就称这组放置为一个满覆盖,若去掉满覆盖的任意一个棋子都会使他不再是满覆盖,就称为一组极小慢覆盖;程序要求如下:
1 求解一个极小满覆盖
2程序能方便移植到其他规格棋盘上、
...全文
632 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
foreverwht 2009-05-10
  • 打赏
  • 举报
回复
最近几天学校网络问题没上,自己也在调试程序 感觉和8楼思路有点像,但可能个人编程能力有限,所以有了思路后程序编的还是有一堆问题,还是感谢大家哈~偶是新手。。。分不多。。见谅。。。。

PS:如果能有人给我一个大概的函数主体就好了。。。- -!
volant_hoo 2009-05-09
  • 打赏
  • 举报
回复
感觉楼主说的应该是马一步能吃掉,而不是多步才能吃掉
多步很简单,大于3*4的放一个马就能吃完了,没有意义
中国象棋和国际象棋中马差不多,就是多了个别马腿,还有就是棋盘大小有些差别
呵呵,考虑别马腿的话这题难很多,如果考虑使用最少的马覆盖,也有一定的难度
绿色夹克衫 2009-05-08
  • 打赏
  • 举报
回复
这样随便选点恐怕得不到最优解,可以转化为拼图问题,先从4个角上的点开始求解

[Quote=引用 3 楼 joanlynnlove 的回复:]
给定了棋盘之后。
先随便放一只马,对棋盘进行宽搜遍历,能到达的点都不用放马了。
在剩下不能到达的点中任选一个点放下一个马,同样宽搜遍历。
这样一直进行下去,直到棋盘点全部能到达。
所需要的马数就是最小的马数了。
[/Quote]
acdbxzyw 2009-05-08
  • 打赏
  • 举报
回复
我还以为走法是一样的呢。
丢人丢大了。
acdbxzyw 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 litaoye 的回复:]
宽搜的结果并不能保证任何两只马必然不会踩到同一点上,
实际上最优解中也会存在2匹马踩到同一点的可能,一个马可以控制的点最多有8个。

引用 7 楼 joanlynnlove 的回复:
引用 6 楼 litaoye 的回复:
这样随便选点恐怕得不到最优解,可以转化为拼图问题,先从4个角上的点开始求解

我认为必然得到最优解。
宽搜保证任何两只马必然不会踩到同一点上,否则一只马就能办到两只马的事了。
也就是说每只马都只能踩到自己…
[/Quote]

这样。。。
我不会下国际象棋,我是按中国象棋的想法做的。
不要理我。
volant_hoo 2009-05-08
  • 打赏
  • 举报
回复
如果只求一个解很好办:先全部放马,然后从一个马(可以指定一个,也可以随机)开始,把所有能直接吃掉的干掉;然后对下一个没被吃掉马做上操作,直到所有的马都遍历或者被吃掉。
呵呵,不是最优解,最优解等楼下的。
绿色夹克衫 2009-05-08
  • 打赏
  • 举报
回复
宽搜的结果并不能保证任何两只马必然不会踩到同一点上,
实际上最优解中也会存在2匹马踩到同一点的可能,一个马可以控制的点最多有8个。

[Quote=引用 7 楼 joanlynnlove 的回复:]
引用 6 楼 litaoye 的回复:
这样随便选点恐怕得不到最优解,可以转化为拼图问题,先从4个角上的点开始求解

我认为必然得到最优解。
宽搜保证任何两只马必然不会踩到同一点上,否则一只马就能办到两只马的事了。
也就是说每只马都只能踩到自己的一部分点,拼起来才会是整个棋盘。
[/Quote]
acdbxzyw 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 litaoye 的回复:]
这样随便选点恐怕得不到最优解,可以转化为拼图问题,先从4个角上的点开始求解

[/Quote]

我认为必然得到最优解。
宽搜保证任何两只马必然不会踩到同一点上,否则一只马就能办到两只马的事了。
也就是说每只马都只能踩到自己的一部分点,拼起来才会是整个棋盘。
fengcman 2009-05-07
  • 打赏
  • 举报
回复
这个问题可以转化为从一个点出发,以一种方式去走,比如马的走法上两步,右一步。经过多次后看是否能回到原点,再统计能回到原点的走过的次数
Linux校园社区 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 joanlynnlove 的回复:]
给定了棋盘之后。
先随便放一只马,对棋盘进行宽搜遍历,能到达的点都不用放马了。
在剩下不能到达的点中任选一个点放下一个马,同样宽搜遍历。
这样一直进行下去,直到棋盘点全部能到达。
所需要的马数就是最小的马数了。
[/Quote]学习
acdbxzyw 2009-05-07
  • 打赏
  • 举报
回复
给定了棋盘之后。
先随便放一只马,对棋盘进行宽搜遍历,能到达的点都不用放马了。
在剩下不能到达的点中任选一个点放下一个马,同样宽搜遍历。
这样一直进行下去,直到棋盘点全部能到达。
所需要的马数就是最小的马数了。
topplayers 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Paradin 的回复:]
没懂意思
觉得一只马就够了
[/Quote]
正方形的棋盘或许可以,如果是其他矩形就不一定了,比如2*3的棋盘,一只马只能吃两个点
Paradin 2009-05-07
  • 打赏
  • 举报
回复
没懂意思
觉得一只马就够了

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧