全排列
#include<iostream>
using namespace std;
int n;
int vis[10],ans[10];
void dfs(int k)
{
if(k==n)
{
for(int i=0;i<n;i++) cout<<ans[i]<<" ";
cout<<endl;
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;
ans[k]=i;
dfs(k+1);
vis[i]=0;
}
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}
n皇后
#include<iostream>
using namespace std;
const int N = 20;
int n,res[N],col[N],dg[N],udg[N];
void dfs(int k)
{
if(k==n)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(res[i]==j) cout<<"Q";
else cout<<".";
}
cout<<endl;
}
cout<<endl;
}
int i=k+1;
for(int j=1;j<=n;j++)
{
if(!col[j] && !dg[i+j-1] && !udg[n-j+i])
{
col[j]=dg[i+j-1]=udg[n-j+i]=1;
res[i]=j;
dfs(k+1);
col[j]=dg[i+j-1]=udg[n-j+i]=0;
}
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}