N皇后問題 dfs

結果:
打印輸出所有滿足條件的擺放位置圖 和 所有滿足條件的數目(ans)。

 #include<iostream>
#include<string.h>
#include<stdio.h>
#include<cstdio>
using namespace std;
int n;
int G[20][20];
bool a[20];//列佔用情況
bool x1[20];// 左下右上對角佔用情況  左上角對應斜線x1[0] 
bool y1[20];//左上右下對角佔用情況    左下角對應斜線y1[0] 
int ans =0; 
void dfs(int deep){
    if(deep>=n){
        for(int i=0;i<n;++i){
            for(int j=0;j<n;++j){
                cout<<G[i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<'\n'; 
        ans++;
        return;
    }
    for(int i=0;i<n;i++){
        if(x1[i+deep]==false&&y1[i-deep+n]==false&&a[i]==false){
            x1[deep+i] = true;
            y1[i-deep+n] = true;
            a[i] = true;
            G[deep][i] =1;
            dfs(deep+1);
            a[i] = false;
            x1[deep+i] = false;
            y1[i-deep+n] = false;
            G[deep][i] = 0;
        }
    }
}
int main() {
    cin >> n;
    memset(a,false,sizeof(a));
    memset(x1,false,sizeof(x1));
    memset(y1,false,sizeof(y1));
    memset(G,0,sizeof(G));
    dfs(0);
    cout<<"滿足條件的數目爲:"<<ans<<'\n';
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章