Bootstrap

dfs(模板)

842. 排列数字 - AcWing题库

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std; 
const int N=10;
int a[N];
bool check[N];
int n;
int dg[N],udg[N];

void dfs(int u)
{
	if(u==n)//结束条件 
	{
		for(int i=0;i<n;i++)
		 cout<<a[i]<<" ";
		cout<<endl; 
	}
	
	for(int i=1;i<=n;i++)
    {
    	if(!check[i])
    	{   check[i]=true;
    		a[u]=i;
    		dfs(u+1);
    		check[i]=false;//回溯 
		}
	}
	
 } 






signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
	cin>>n;
	dfs(0);
	 
	
	
    
   
    
}

843. n-皇后问题 - AcWing题库

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std; 
const int N=20;
char a[N][N];
bool check[N];
int n;
bool dg[N],udg[N],cor[N];

void dfs(int u)
{
	if(u>n)
	{
		for(int i=1;i<=n;i++)
		 {
		 for(int j=1;j<=n;j++)
		  cout<<a[i][j];
		 cout<<endl;
	    }
	    cout<<endl;
	}
	
	for(int i=1;i<=n;i++)//i是列 u是行
	 {
	 	if(!cor[i]  && !dg[i+u]&&!udg[n-i+u] )
	 	{
	 	   cor[i]=dg[i+u]=udg[n-i+u]=1;
	 	   a[u][i]='Q';
	 	   dfs(u+1);
	 	   cor[i]=dg[i+u]=udg[n-i+u]=0;
	 	   a[u][i]='.';

		}
	 }
 } 






signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=n;j++)
	 a[i][j]='.'; 
	
	dfs(1);
	 
	
	
    
   
    
}

纯暴力

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std; 
const int N=20;
char a[N][N];
bool check[N];
int n;
bool row[N],dg[N],udg[N],col[N];//dg udg存斜边,cor存列row行 

void dfs(int x,int y,int s)
{	if(y==n) y=0,x++;
	if(x==n)
	{   if(s==n)
    	{
		 for(int i=0;i<n;i++)
		 cout<<a[i]<<endl;cout<<endl;
	    }
	    
	    return ;
	   }
	

	
	
	   if(!row[x]&&!col[y]&&!dg[x+y]&&!udg[n-y+x])
       {
		 a[x][y]='Q';
        row[x]=col[y]=dg[x+y]=udg[n-y+x]=1;
        dfs(x,y+1,s+1);
        row[x]=col[y]=dg[x+y]=udg[n-y+x]=0;
        a[x][y]='.';
     }
     dfs(x,y+1,s);
	
 } 






signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=0;i<n;i++)
	 for(int j=0;j<n;j++)
	 a[i][j]='.'; //初始化 
	
	dfs(0,0,0);
	 
	
	
    
   
    
}

;