YCOJN皇后

Time Limit Exceed發表於2019-01-26

N皇后

在 N*N 的棋盤上放置 N 個皇后而彼此不受攻擊(即在棋盤的任一行,任一列和任一對角線上 不能放置 2 個皇后),程式設計求解所有的擺放方法。
輸入 輸出
4 2
這道題是有規律的,其皇后在同一行上,則行號相同;其皇后在同一列上,則列號相同,在/線上,則行列之和相同,在\線上,則行列之差相同。
在這裡插入圖片描述

直接上程式碼吧:

#include<bits/stdc++.h>
using namespace std;
	//因為皇后在同一行,則行號相同,皇后在同一列,則列號相同,皇后在斜線上,則行列之和相同 
int n,ans=0;;
int vis[100];
int a[100],b[100],c[100];//a[表示皇后放置位置],b[判斷皇后列是否已有皇后]
//c[判斷斜線是否已有皇后]

void dfs(int dep){
	if(dep>n){
		ans++;
		return ;
	}
	for(int i=1;i<=n;i++){
		if((!a[i])&&(!b[dep+i])&&(!c[dep-i+n])){
			a[i]=1;
			b[dep+i]=1;
			c[dep-i+n]=1;//標記
			dfs(dep+1);
			a[i]=0;
			b[dep+i]=0;
			c[dep-i+n]=0;//刪掉標記 
			 
		}
	}
}
int main(){
	cin >> n;
	dfs(1);//從1開始找

		cout << ans; 
	
	return 0;
} 

相關文章