hdu 2553 Nクイーン問題(bfs)

ポータル

#include<bits/stdc++.h>
using namespace std;
int n,sum=0,col[12];
bool check(int c,int r){
    
    
    for(int i=0;i<r;i++){
    
    
        if(col[i]==c||(abs(col[i]-c)==abs(i-r)))
            return false;
    }
    return true;
}
void dfs(int r)
{
    
    
    if(r==n){
    
    
        sum++;
        return;
    }
    for(int c=0;c<n;c++){
    
    
        if(check(c,r)){
    
    
            col[r]=c;
            dfs(r+1);
        }
    }
}
int main()
{
    
    
    int ans[12];
    for(n=1;n<=10;n++){
    
    
        memset(col,0,sizeof(col));
        sum=0;
        dfs(0);
        ans[n]=sum;
    }
    while(cin>>n){
    
    
        if(n==0) break;
        cout<<ans[n]<<endl;
    }
    return 0;
}

古典的な問題、重要な点は、チェック機能が現在の場所にクイーンを配置できるかどうかを判断することです

おすすめ

転載: blog.csdn.net/Lzhzl211/article/details/114993968