https://www.acwing.com/problem/content/845/
#include<cstdio>
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int n;
int path[15];
bool vis[15];
void dfs(int index)
{
for(int i=0;i<index;i++)
for(int j=i+1;j<index;j++)
if(abs(i-j)==abs(path[i]-path[j])) return;
if(index==n)
{
bool b[15][15]={0};
for(int i=1;i<=n;i++) b[path[i-1]][i]=true;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(b[i][j]) cout<<"Q";
else cout<<".";
}
cout<<endl;
}
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
path[index]=i;
vis[i]=true;
dfs(index+1);
vis[i]=false;
}
}
}
int main(void)
{
cin>>n;
dfs(0);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=15;
int a[N],vis[N],n;
void dfs(int index)
{
for(int i=1;i<index;i++)
for(int j=i+1;j<index;j++)
if(abs(a[i]-a[j])==abs(i-j)) return ;
if(index==n+1)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[j]==i) cout<<'Q';
else cout<<".";
}
cout<<endl;
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;
a[index]=i;
dfs(index+1);
vis[i]=0;
}
}
}
int main(void)
{
cin>>n;
dfs(1);
}