N皇后问题
在N*N的方格棋盘放置N个皇,使得它们不相互攻击(即任意2个皇后不允许处在同一行,或同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种符合要求放置方法。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 using namespace std; 3 int nthqueen,n,ans,board[20]; 4 int check(int k) 5 { 6 for(int i=1;i<k;i++) 7 if(abs(k-i)==abs(board[k]-board[i])||board[k]==board[i]) return 0; 8 return 1; 9 } 10 void dfs(int cnt) 11 { 12 if(cnt>n&&n>0) ans++; 13 else 14 { 15 for(int i=1;i<=n;i++) 16 { 17 board[cnt]=i; 18 if(check(cnt)) dfs(cnt+1); 19 } 20 } 21 return ; 22 } 23 int main() 24 { 25 cin>>n; 26 dfs(1); 27 cout<<ans; 28 //system("pause"); 29 }