• 大小: 453KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: C/C++
  • 标签:

资源简介

在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

评论

共有 条评论