N皇后问题

 在N*N的方格棋盘放置N个皇,使得它们不相互攻击(即任意2个皇后不允许处在同一行,或同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种符合要求放置方法。

 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 }
代码
原文地址:https://www.cnblogs.com/LZHE/p/6397737.html