数的排列 *
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,pri[N];
bool st[N];
void dfs(int x)
{
if(x==n)
{
for(int i=0;i<n;i++)
printf("%d ",pri[i]);
printf("\n");
return ;
}
for(int i=1;i<=n;i++)
{
if(!st[i])
{
pri[x]=i;
st[i]=true;
dfs(x+1);
st[i]=false;
}
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}
n皇后 **
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n; //皇后数
char g[N][N];
bool col[N],dg[N],udg[N]; //列 斜行 反
void dfs(int x) //深搜
{
if(x==n)
{
for(int i=0;i<n;i++)
puts(g[i]);
puts("");
return ;
}
for(int i=0;i<n;i++) //x为行 i为列
{
if(!col[i]&&!dg[x+i]&&!udg[n-x+i]) //对应 y=-x+b y=x+b 所求出的b
{
g[x][i]='Q';
col[i]=dg[x+i]=udg[n-x+i]=true;
dfs(x+1);
col[i]=dg[x+i]=udg[n-x+i]=false;
g[x][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;
}