-
大小: 11KB文件類(lèi)型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-05-21
- 語(yǔ)言: 其他
- 標(biāo)簽:
資源簡(jiǎn)介
//題目21:在8*8的國(guó)際象棋上,如果在放置若干馬后,使得整個(gè)棋盤(pán)的任意空位置上所放置的棋子均能被這些馬吃掉,
//則稱(chēng)這組放置為棋盤(pán)的一個(gè)滿覆蓋。若去掉滿覆蓋中的任意一個(gè)棋子都會(huì)使這組放置不再是滿覆蓋,則稱(chēng)這
//一滿覆蓋為極小滿覆蓋。設(shè)計(jì)程序完成如下要求:
// (1)求解一個(gè)極小滿覆蓋。
// (2)最好能畫(huà)出棋盤(pán)的圖形形式,并在其上動(dòng)態(tài)的演示試探過(guò)程。
// (3)程序能方便的移植到其它規(guī)格的棋盤(pán)上。

代碼片段和文件信息
////////////////////////////////---------課程設(shè)計(jì)
//題目21:在8*8的國(guó)際象棋上,如果在放置若干馬后,使得整個(gè)棋盤(pán)的任意空位置上所放置的棋子均能被這些馬吃掉,
//則稱(chēng)這組放置為棋盤(pán)的一個(gè)滿覆蓋。若去掉滿覆蓋中的任意一個(gè)棋子都會(huì)使這組放置不再是滿覆蓋,則稱(chēng)這
//一滿覆蓋為極小滿覆蓋。設(shè)計(jì)程序完成如下要求:
//????????????(1)求解一個(gè)極小滿覆蓋。
//????????????(2)最好能畫(huà)出棋盤(pán)的圖形形式,并在其上動(dòng)態(tài)的演示試探過(guò)程。
//????????????(3)程序能方便的移植到其它規(guī)格的棋盤(pán)上。
#include
#include
using?namespace?std;
const?int?ChessBoardScale?=?3?;????????????????????????????//棋盤(pán)規(guī)模;
int?Record[ChessBoardScale][ChessBoardScale];??????????????//記錄被吃幾率;
char?Cover[ChessBoardScale][ChessBoardScale];??????????????//記錄可以放馬的位置;
class?ChessBoard{
public:
void?GetChance(?);????????????????????//計(jì)算每一個(gè)位置被其它位置的馬吃掉的幾率;
void?ReCaculateChance(/**/ChessBoard?Cb);????????????//主題算法:計(jì)算極小覆蓋;
void?GetMinCover(ChessBoard?Cb);????????????????????//輸出最終結(jié)果;
void?Condition(int?aint?b?);???????????????//被吃幾率的再次計(jì)算;
};
void?ChessBoard::GetChance(){
for(int?i?=?0;?i? for(int?j?=?0;?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? if(j-1?>=?0??&&??i+2? if(j+2?=?0){?Record[i-1][j+2]++;?}??????????????????
if(j+1?=?0){?Record[i-2][j+1]++;?}
if(j+2? if(j+1? }
}
}
//主體算法------------------------------------
void?ChessBoard::ReCaculateChance(ChessBoard?Cb){
int?Max?=?Record[0][0];
int?Max_i?=?0Max_j?=?0;
for(int?i?=?0;?i? for(int?j?=?0;?j? if(Record[i][j]?>?Max){
Max?=?Record[i][j];
Max_i?=?i;
Max_j?=?j;
}
}
}
if(Record[Max_i][Max_j]?>=?0?){??///////在棋盤(pán)中被吃幾率最大的位置放馬;
Cover[Max_i][Max_j]?=?‘@‘;
Record[Max_i][Max_j]?=?-1;
cout< cout<<“此步計(jì)算馬應(yīng)該在的位置:“<<(ChessBoardScale*Max_i+Max_j)< cout< }????????????????????????????????????////////////棋盤(pán)的輸出;////////////******************
//------------------------------------------------------------------------------------極小覆蓋的算法;
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(ij);
}
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(ij);
}
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(ij);
}
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(ij);
}
if(Max_j+2=?0){
Record[Max_i-1][Max_j+2]?=?-1;
i
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件??????59392??2009-06-29?20:39??馬的極小覆蓋.doc
?????文件???????7326??2009-06-29?19:07??Lcover.cpp
-----------?---------??----------?-----??----
????????????????66718????????????????????2
評(píng)論
共有 條評(píng)論