国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

八皇后算法

2019-11-08 19:26:43
字體:
來源:轉載
供稿:網友
兩個皇后都不能處于同一行、同一列或同一斜線上 討論如果是八個皇后,即存在于8*8的行列式中,每行每列一定存在一個皇后,現在我們用queen[row]=col  表示在第row行的皇后處于第col列,位置的選定,5人  然后判斷此時皇后所處的位置是否發(fā)生沖突,如果沒有沖突且沒有超過row即進行下一行的判斷(遞歸的形式)
void EightQueen::putQueen(int QueenAry[],int nRow,int &soulation)//放置皇后{	for (int col = 0; col < QueenCount; col++)	{		QueenAry[nRow] = col;//當前行的皇后所在列		if (!IsCash(QueenAry, nRow))		{//沒有沖突			if (nRow == QueenCount - 1)//下標為7全部8行解析完畢			{				soulation++;//每滿足一次計算器加1				showQueen(QueenAry, QueenCount, soulation);//顯示結果				_getch();			}			else			{				putQueen(QueenAry, nRow + 1, soulation);//下一行的皇后位置			}		}	}		}沖突的判斷斜45度角判斷列判斷
bool EightQueen::IsCash(int QueenAry[],int nRow)//是否沖突{	for (int nCol = 0; nCol < nRow; nCol++)//從第0列到第nRow-1列開始判斷	{//有沖突 		if (QueenAry[nCol] == QueenAry[nRow])//----------------------------檢測是否在同一列			return true;		if (abs(QueenAry[nCol] - QueenAry[nRow]) == abs(nRow - nCol))//----是否在一條斜線上			return true;	}	return false;//                                    -------沒有沖突}完整代碼
#include<iostream>#include<conio.h>using namespace std;#define QueenCount 11//宏定義皇后的數量     10---724      11---2680  class EightQueen//八皇后類的定義{public:	void putQueen(int QueenAry[], int nRow, int &soulation);//放置皇后  QueenAry[]用于記錄皇后的	void showQueen(int QueenAry[],int len,int &soulation);//每種方案的展示圖PRivate:	bool IsCash(int QueenAry[], int nRow);//沖突判斷};void EightQueen::showQueen(int QueenAry[], int len, int &soulation){	printf("---------Queen position:soulation %d------------------/n", soulation);	for (int i = 0; i < len; i++)	{		/*if (QueenAry[i] == -1)		{			for (int j = 0; j < len; j++)			{				printf("%c", 48);			}			printf("/n");			continue;		}*/       //----------------------這段可以省略,可寫可不寫都可以		for (int j = 0; j < QueenAry[i]; j++)			printf("%c", 48);//打印皇后之前的    空格為0   皇后為1		printf("%c", 49);//打印皇后		for (int j = 0; j < len - 1 - QueenAry[i]; j++)			printf("%c", 48);		printf("/n");//每執(zhí)行一行換行	}}bool EightQueen::IsCash(int QueenAry[],int nRow)//是否沖突{	for (int nCol = 0; nCol < nRow; nCol++)//從第0列到第nRow-1列開始判斷	{//有沖突 		if (QueenAry[nCol] == QueenAry[nRow])//----------------------------檢測是否在同一列			return true;		if (abs(QueenAry[nCol] - QueenAry[nRow]) == abs(nRow - nCol))//----是否在一條斜線上			return true;	}	return false;//                                    -------沒有沖突}void EightQueen::putQueen(int QueenAry[],int nRow,int &soulation)//放置皇后{	for (int col = 0; col < QueenCount; col++)	{		QueenAry[nRow] = col;//當前行的皇后所在列		if (!IsCash(QueenAry, nRow))		{//沒有沖突			if (nRow == QueenCount - 1)//下標為7全部8行解析完畢			{				soulation++;//每滿足一次計算器加1				showQueen(QueenAry, QueenCount, soulation);//顯示結果				_getch();			}			else			{				putQueen(QueenAry, nRow + 1, soulation);//下一行的皇后位置			}		}	}		}int main(){	int QueenAry[QueenCount];//皇后的數量-----第一行放置第一個數據......第八行放置第八個數據	EightQueen q;//聲明一個變量	int soulation = 0;//計算器清零	q.putQueen(QueenAry, 0, soulation);//執(zhí)行放置皇后	return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴彦县| 淳安县| 石景山区| 长岭县| 崇礼县| 九寨沟县| 建昌县| 射洪县| 沾益县| 承德县| 延川县| 保山市| 阿鲁科尔沁旗| 温泉县| 阿坝县| 长汀县| 泾阳县| 莆田市| 盘锦市| 逊克县| 乌兰浩特市| 宝坻区| 长葛市| 滦南县| 罗平县| 神农架林区| 宾川县| 德格县| 关岭| 仲巴县| 海伦市| 曲靖市| 杭锦后旗| 潜江市| 资阳市| 名山县| 华安县| 凤庆县| 黄山市| 连云港市| 正镶白旗|