DFS,DP————N皇后问题

C++代码

#include <iostream>
using namespace std;
const int N=20;
int n;
char g[N][N];
bool col[N],dg[N],udg[N];
void dfs(int u){
    if (u==n){
        for(int i=0;i<n;i++)puts(g[i]);
        puts("");
        return;
    }
    for (int i=0;i<n;i++)
        if (!col[i]&&!dg[u+i]&&!udg[n-u+i]){
            g[u][i]='Q';
            col[i]=dg[u+i]=udg[n-u+i]=true;
            dfs(u+1);
            col[i]=dg[u+i]=udg[n-u+i]=false;
            g[u][i]='.';
        }
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            g[i][j]='.';
    dfs(0);
    return 0;
} 
//↑制图
//↓方法数
#include<bits/stdc++.h>
using namespace std;
int n,total=0,flag[4][50];
void dfs(int i){
	if(i==n+1){total++;return;}
    for(int j=1;j<=n;++j){
        if(flag[1][j]&&flag[2][i+j]&&flag[3][i-j+n]){ 
            flag[1][j]=false;flag[2][i+j]=false;flag[3][i-j+n]=false;   
            dfs(i+1); 
            flag[1][j]=true;flag[2][i+j]=true;flag[3][i-j+n]=true;
        }
    }
}


int main(){
	for(int i=1;i<=3;i++)
	for(int j=1;j<=50;j++)
	flag[i][j]=true; 
	cin>>n;
	dfs(1);
	cout<<total;
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/myhnb/p/11305774.html