且未

博客园 首页 新随笔 联系 订阅 管理
#include<stdio.h>
#include<iostream>
using namespace std;
int n,ans;
int vis[10];//vis[i]:第i行有一个皇后在vis[i]列
int check(int r,int c)
{
    for(int i=1;i<=r;i++)
    {
        if(vis[i]==c) return false;//同列
        if(vis[i]-c==r-i||vis[i]-c==i-r) return false;//同对角线
    }
    return true;
}
void dfs(int r)
{
    if(r>n) {
        ans++;
        return;
    }
    for(int c=1;c<=n;c++)
    {
        if(check(r,c)){
            vis[r]=c;
            dfs(r+1);
            vis[r]=0;
        }
    }
}
int main(){

    cin>>n;
    ans = 0;
    dfs(1);
    cout<<ans<<endl;
    return 0;
}

 

posted on 2018-11-25 12:23  阿聊  阅读(86)  评论(0编辑  收藏  举报