n皇后问题

这个题目很懵逼啊,回溯法什么的,所以我也不多说什么,主要说一下我对这个思路的理解, 最开始看书上,然后没想过对于如何调用这个函数,应该怎么写所以,我写着写着就写不下去了,所以我 直接借鉴其他人的代码,这个思路,第一个dfs部分是判断和之前是否矛盾,主函数部分则是开始进行循环,而这个主函数的循环就是我们没有考虑到的地方

#include<stdio.h>
#include<string.h>

int n,tmp;
int map[11];

void DFS(int k)
{
    int i,j,flag;
    if(k==n+1)
    {
        tmp++;
        return;
    }
    else
    {
        for(i=1;i<=n;++i)
        {
            map[k]=i;
            flag=1;
            for(j=1;j<k;++j)
            {
                if(map[j]==i||i-k==map[j]-j||i+k==map[j]+j)   // 注:1、i=map[k]  2、不在同一条斜线的两点的含义是行标到对角线的的距离不相等
                {
                    flag=0;
                    break;
                }
            }
            if(flag)
                DFS(k+1);
        }
    }
}

int main()
{
    int i,m;
    int ans[11];
    for(n=1;n<=10;++n)
    {
        tmp=0;
        DFS(1);
        ans[n]=tmp;
    }
    while(scanf("%d",&m),m)
    {
        printf("%d
",ans[m]);
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/yintoki/p/5676731.html