资源简介
在8×8的国际象棋棋盘上,如果在放置若干个马以后,使得整个棋盘的任意空位置上所放置的棋子均能被这些马吃掉,则称这组放置为棋盘的一个满覆盖。若去掉满覆盖中的任意一个棋子都会使这组放置不再是满覆盖,则称这一满覆盖为极小满覆盖。
有源代码和exe文件,可直接套用运行
代码片段和文件信息
#include
#include
using namespace std;
const int ChessBoardScale = 3; //棋盘规模;
int Record[ChessBoardScale][ChessBoardScale]; //记录被吃几率;
char Cover[ChessBoardScale][ChessBoardScale]; //记录可以放马的位置;
class ChessBoard{
public:
void GetChance(); //计算每一个位置被其它位置的马吃掉的几率;
void ReCaculateChance(/**/ChessBoard Cb); //主题算法:计算极小覆盖;
void GetMinCover(ChessBoard Cb); //输出最终结果;
void Condition(int a int b); //被吃几率的再次计算;
};
void ChessBoard::GetChance(){
for (int i = 0; i < ChessBoardScale; i++){
for (int j = 0; j < ChessBoardScale; j++){
int k = 0;
if (j - 2 >= 0 && i - 1 >= 0){ Record[i - 1][j - 2]++; }
if (j - 1 >= 0 && i - 2 >= 0){ Record[i - 2][j - 1]++; }
if (j - 2 >= 0 && i + 1 < ChessBoardScale){ Record[i + 1][j - 2]++; }
if (j - 1 >= 0 && i + 2 < ChessBoardScale){ Record[i + 2][j - 1]++; }
if (j + 2 < ChessBoardScale && i - 1 >= 0){ Record[i - 1][j + 2]++; }
if (j + 1 < ChessBoardScale && i - 2 >= 0){ Record[i - 2][j + 1]++; }
if (j + 2 < ChessBoardScale && i + 1 < ChessBoardScale){ Record[i + 1][j + 2]++; }
if (j + 1 < ChessBoardScale && i + 2 < ChessBoardScale){ Record[i + 2][j + 1]++; }
}
}
}
//主体算法------------------------------------
void ChessBoard::ReCaculateChance(ChessBoard Cb){
int Max = Record[0][0];
int Max_i = 0 Max_j = 0;
for (int i = 0; i < ChessBoardScale; i++){
for (int j = 0; j < ChessBoardScale; j++){//////计算棋盘中被吃几率最大的位置;
if (Record[i][j] > Max){
Max = Record[i][j];
Max_i = i;
Max_j = j;
}
}
}
if (Record[Max_i][Max_j] >= 0){ ///////在棋盘中被吃几率最大的位置放马;
Cover[Max_i][Max_j] = ‘@‘;
Record[Max_i][Max_j] = -1;
cout << endl;
cout << “此步计算马应该在的位置:“ << (ChessBoardScale*Max_i + Max_j) << endl;///////////////输出马应该在的位置;
cout << endl;
} ////////////棋盘的输出;////////////******************
//------------------------------------------------------------------------------------极小覆盖的算法;
if (Max_j - 2 >= 0 && Max_i - 1 >= 0){
Record[Max_i - 1][Max_j - 2] = -1;
int i = Max_i - 1;
int j = Max_j - 2;
Cb.Condition(i j);
}
if (Max_j - 1 >= 0 && Max_i - 2 >= 0){
Record[Max_i - 2][Max_j - 1] = -1;
int i = Max_i - 2;
int j = Max_j - 1;
Cb.Condition(i j);
}
if (Max_j - 2 >= 0 && Max_i + 1 Record[Max_i + 1][Max_j - 2] = -1;
int i = Max_i + 1;
int j = Max_j - 2;
Cb.Condition(i j);
}
if (Max_j - 1 >= 0 && Max_i + 2 Record[Max_i + 2][Max_j - 1] = -1;
int i = Max_i + 2;
int j = Max_j - 1;
Cb.Condition(i j);
}
if (Max_j + 2= 0){
Record[Max_i - 1][Max_j + 2] = -1;
int i = Max_i - 1;
int j = Max_j + 2;
Cb.Condition(i j);
}
if (Max_j + 1= 0){
Record[Max_i - 2][Max_j + 1] = -1;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-10-21 16:40 horse1\
文件 898 2017-10-21 16:40 horse1\horse.dev
文件 1928525 2017-10-21 16:39 horse1\horse.exe
文件 96 2017-10-21 16:40 horse1\horse.layout
文件 7313 2017-10-21 16:39 horse1\main.cpp
文件 12997 2017-10-21 16:39 horse1\main.o
文件 1065 2017-10-21 16:39 horse1\Makefile.win
- 上一篇:一个漂亮的VC++示波器生成类
- 下一篇:MFC实现K均值算法
相关资源
- C/C++课程设计-学生成绩管理系统
- C++课程设计飞机订票系统
- c++课程设计日期格式处理
- C++课程设计 电煤气管理系统
- 大学C++课程设计图书馆管理系统源代
- C++课程设计报告-科学计算器加强版
- c++课程设计物流管理系统
- C++课程设计之简易英汉字典
- 学分管理系统c++课程设计
- 通讯录C++课程设计学生通讯录管理系
- C++课程设计大作业
- C++课程设计影碟出租管理
- 南航C++课程设计含课设报告
- 诊所信息管理系统C++课程设计报告
- 中南大学信息院C++课程设计报告
- 扫雷游戏源程序 c++课程设计必备
- C++课程设计-Flappy Bird
- C++课程设计 学生信息系统管理
- c++课程设计 自动饮料售卖机 源代码
- C++课程设计网吧管理系统
- c++课程设计 学籍管理系统
- 毕业论文:VC++课程设计报告-三子连珠
- C++课程设计:航空客运订票系统工程
- Visual C++课程设计案例精编 源程序
- 五个简单的C++课程设计
- C++课程设计媒体库管理系统
- C++超市管理系统含课程设计报告
- C++课程设计报告及源码
- 商品信息管理系统c++课程设计
- C++课程设计-便利店管理系统.rar
评论
共有 条评论