n皇后问题--递归回溯

来源:互联网 发布:魔兽世界5m掉落数据库 编辑:程序博客网 时间:2024/04/29 05:15

方法一:递归回溯;

#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;int n,a[20],sum;void dfs(int x){    int i;    if(x>n)    {        sum++;        return ;    }    for(i=1;i<=n;i++)    {        a[x]=i;       if(canPlace(x,i))//检测当x行 i 列放置皇后 是否冲突        dfs(x+1);    }}bool canPlace(int l,int i){    for(int k=1;k<l;k++)     if(abs(l-k)==abs(a[k]-i)||i==a[k])//和其他皇后在一条斜线上,或在同一列        return 0;    return 1;}int main(){    //ans[11]={0,1,0,0,2,10,4,40,92,352,724}    n=0;    while(n<11)    {       sum=0;       dfs(1);//从第一行第一个出发,递归搜索所有的路径       printf("%d,",sum);       n++;    }    return 0;}


方法二: