洛谷八皇后問題

划水马师傅發表於2024-04-21

洛谷八皇后問題

原題連結https://www.luogu.com.cn/problem/P1219
簡單dfs思路,g[n]儲存的是可以作為選擇的列下標
輸出的時候記著加一(從0開始)

#include <iostream>
#include<cstring>
        
using namespace std;

const int N=15;
int n;
int num;

bool lie[N],duijiao[2*N],Uduijiao[2*N];
int g[N];

const int maxx=3;
void dfs(int row)//row是行//col是列
{
    if(row==n)
    {
            num++;
            if(num>maxx)return ;
            for(int i=0;i<n;i++)
            {
             cout<<g[i]+1<<" ";
            }
            puts("");
            return ;
        
       
    }

    for(int col=0;col<n;col++)
    {
        if(!lie[col]&&!duijiao[col+row]&&!Uduijiao[n-row+col-1])
        {
            lie[col]=duijiao[row+col]=Uduijiao[n-row+col-1]=true;
            g[row]=col;
            dfs(row+1);
            lie[col]=duijiao[row+col]=Uduijiao[n-row+col-1]=false;
            //g[row]=0;
        }
    }



}

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)lie[i]=false;
    for(int i=0;i<n*2;i++)duijiao[i]=Uduijiao[i]=false;
    dfs(0);
    cout<<num<<endl;
}

相關文章