C++代碼ios
#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; }