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

首頁 > 學院 > 開發設計 > 正文

基礎練習 2n皇后問題

2019-11-08 02:46:06
字體:
來源:轉載
供稿:網友

問題描述  給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小于等于8。輸入格式  輸入的第一行為一個整數n,表示棋盤的大小。  接下來n行,每行n個0或1的整數,如果一個整數為1,表示對應的位置可以放皇后,如果一個整數為0,表示對應的位置不可以放皇后。輸出格式  輸出一個整數,表示總共有多少種放法。樣例輸入41 1 1 11 1 1 11 1 1 11 1 1 1樣例輸出2樣例輸入41 0 1 11 1 1 11 1 1 11 1 1 1樣例輸出0

解答代碼

#include<iostream>#include<string>#include<cstdio>#include<cmath>#define maxSize 128int blackFlag[maxSize];int whiteFlag[maxSize];int chessBoard[maxSize][maxSize];int counter=0;int n;using namespace std;int blackQueend(int pos);int whiteQueen(int pos);int blackQueen(int pos){	int i,j;	for(i=0;i<pos-1;i++)	{		if(blackFlag[i]==blackFlag[pos-1] || fabs(pos-1-i)==fabs(blackFlag[i]-blackFlag[pos-1]))			return 0;	}	if(pos==n)	{		counter++;		return 0;	}	for(j=0;j<n;j++)	{		if(j!=whiteFlag[pos] && chessBoard[pos][j]==1)		{			blackFlag[pos]=j;			blackQueen(pos+1);		}	}}int whiteQueen(int pos){	int i,j;	for(i=0;i<pos-1;i++)	{		if(whiteFlag[i]==whiteFlag[pos-1] || fabs(pos-1-i)==fabs(whiteFlag[i]-whiteFlag[pos-1]))			return 0;	}	if(pos==n)	{		blackQueen(0);		return 0;	}	for(j=0;j<n;j++)	{		if(chessBoard[pos][j]==1)		{			whiteFlag[pos]=j;			whiteQueen(pos+1);		}	}}int main(){	//freopen("input2.txt","r",stdin);	int i,j;		cin>>n;	//cout<<n<<endl;	for(i=0;i<n;i++)		for(j=0;j<n;j++)			cin>>chessBoard[i][j];	whiteQueen(0);	cout<<counter<<endl;	return 0;} 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北京市| 江阴市| 广德县| 安丘市| 德州市| 道孚县| 辉县市| 宁津县| 兴隆县| 白玉县| 江阴市| 荔浦县| 三原县| 肇庆市| 昭苏县| 瑞金市| 南和县| 溧阳市| 扎鲁特旗| 廉江市| 秦皇岛市| 福州市| 吴桥县| 萝北县| 交城县| 新宾| 都江堰市| 商城县| 曲沃县| 韩城市| 杭州市| 山阳县| 孝昌县| 齐齐哈尔市| 咸丰县| 乐至县| 黄冈市| 文安县| 渝北区| 肥东县| 新乐市|