八皇后問題,是一個古老而著名的問題,是回溯算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於1848年提出:在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認爲有76種方案。1854年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。
然而這是N皇后哈哈哈哈哈~~~
可以去HDU或者ZJYYC試試
題目
在N*N的方格棋盤放置了N個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的N,求出有多少種合法的放置方法。
輸入
測試數據由多組測試樣例組成。每組測試數據第一行輸入一個正整數 n ( 1 <= n <= 10 )
輸出
輸出有多少種合法的放置方法
樣例輸入
1
5
樣例輸出
1
10
代碼
#include<bits/stdc++.h>
using namespace std;
int t,n,m,a,b,sum;
int Map[20];
void dfs(int x){
if(x==n){
sum++;
return;
}
int i,j;
for(i=0;i<n;i++){
for(j=0;j<x;j++){
if(Map[j]==i||abs(x-j)==abs(Map[j]-i)){
break; //兩個點45度直線,兩條邊相等
}
}
if(j==x){
Map[x]=i;
dfs(x+1);
}
}
}
int main(){
while(scanf("%d",&n)!=EOF){
memset(Map,0,sizeof(Map));
sum=0;
dfs(0);
printf("%d\n",sum);
}
return 0;
}