棋盘最小满覆盖问题在8×8的国际象棋棋盘上,如果在某些位置放置若干个马之后,使整个棋盘中任意空位置上所放置的棋子均能被这些马吃掉,则把这组放置的棋子称为一个满覆盖。
若去掉满覆盖中的任意一个棋子都破环了满覆盖,则称这一覆盖为最小满覆盖。
算法思路:设计棋盘每个位置的数据结构如下typedefstruct{intcount;//攻击次数inthorse;//是否放有马intcount2;//该位置可影响的马被攻击次数总和}boardpoint;//棋盘元素其中,count为每个位置被攻击次数(即周围存在的马的个数),count2为周围八个位置(如果不越界)count之和。
算法思路为:既然拿取到不能拿取是一个满覆盖,那不妨先在棋盘上放满棋子,不断进行拿取操作直到不能再拿取。
问题的关键就在于确定一个拿取顺序。
我这里现依据count对棋盘元素有小到大排序,在count相同的情况下,再依据count2由小到大进行排序。
这样就得到一个拿取顺序。
在每一次拿取之后更新棋盘,重新排序,进行下一次拿取。
当所有棋子都不能被拿取时,输出这个满覆盖。
在10*10棋盘上,本算法得到一个22个棋子的满覆盖。
修改排序条件应该还可以进一步优化这个结果。
1
//题目21:在8*8的国际象棋上,如果在放置若干马后,使得整个棋盘的任意空位置上所放置的棋子均能被这些马吃掉,//则称这组放置为棋盘的一个满覆盖。
若去掉满覆盖中的任意一个棋子都会使这组放置不再是满覆盖,则称这//一满覆盖为极小满覆盖。
设计程序完成如下要求://(1)求解一个极小满覆盖。
//(2)最好能画出棋盘的图形形式,并在其上动态的演示试探过程。
//(3)程序能方便的移植到其它规格的棋盘上。
2024/12/20 5:57:40 11KB 课程设计:马的极小覆盖
1
用C#写的马的极小满覆盖问题:在8×8的国际象棋棋盘上,如果在放置若干个马以后,使得整个棋盘的任意空位置上所放置的棋子均能被这些马吃掉,则称这组放置为棋盘的一个满覆盖。
若去掉满覆盖中的任意一个棋子都会使这组放置不再是满覆盖,则称这一满覆盖为极小满覆盖。
求解一个极小满覆盖,按照矩阵方式给出,用特殊符号表示马。
2016/11/13 21:51:24 5KB C# 极小 满覆盖
1
在8×8的国际象棋棋盘上,如果在放置若干个马以后,使得整个棋盘的任意空位置上所放置的棋子均能被这些马吃掉,则称这组放置为棋盘的一个满覆盖。
若去掉满覆盖中的任意一个棋子都会使这组放置不再是满覆盖,则称这一满覆盖为极小满覆盖。
有源代码和exe文件,可直接套用运转
2020/11/6 9:46:03 453KB C++课程设计
1
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡