题解-N皇后问题

N皇后问题

描述

在 N*N 的棋盘上放置 N 个皇后而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上 不能放置 2 个皇后),编程求解所有的摆放方法。

输入

一个数字N (3 <= N <= 10) 表示棋盘是N * N大小的。

输出

输出方案数;若无方案,则输出 “no solute!”

输入样例 1

4

输出样例 1

2

基本思路:按行DFS,枚举当前行上的每一列,选取符合条件(行、列、对角线
不冲突)的列,并对所在行、列、对角线打标记;转移到下一行继续搜索…
代码:

#include
using namespace std;
int n;    
int sum=0;    
int cnt[100];  
int tmp(int cns){
    int i;
    for(i= 1;in&&n>0){
		sum++;    
	}else{
    	for(int i=1;i<=n;i++){ 
        	cnt[t] = i;  
        	if(tmp(t)){
        		dfs(t+1);
        	}		    
		}   
	}
    return sum;	 
}   
int main(){  
    int t;
    cin>>n;  
    t=dfs(1); 
    if(n==0){
      t=0;
	}
    cout<

你可能感兴趣的:(题解)