n-皇后問題是指將 n 個皇后放在 n∗n 的國際象棋棋盤上,使得皇后不能相互攻擊到,即任意兩個皇后都不能處於同一行、同一列或同一斜線上。css
如今給定整數n,請你輸出全部的知足條件的棋子擺法。java
共一行,包含整數n。數組
每一個解決方案佔n行,每行輸出一個長度爲n的字符串,用來表示完整的棋盤狀態。spa
其中」.」表示某一個位置的方格狀態爲空,」Q」表示某一個位置的方格上擺着皇后。code
每一個方案輸出完成後,輸出一個空行。xml
1≤n≤91≤n≤9blog
4
.Q.. ...Q Q... ..Q. ..Q. Q... ...Q .Q..
代碼:
import java.util.Scanner; public class Main{ static int n; static final int N=10; static int a[]=new int[N]; static char map[][]=new char[N][N]; static boolean check(int t){ for(int i=0;i<t;i++) if(a[i]==a[t] || Math.abs(i-t)==Math.abs(a[i]-a[t])) return false; return true; } static void dfs(int t){ if(t==n){
//由於開的字符數組大小爲N,實際輸出可不是N,因此兩重循環輸出 for(int i=0;i<n;i++) { for(int j=0;j<n;j++) System.out.print(map[i][j]); System.out.println(); } System.out.println(); } for(int i=0;i<n;i++){ a[t]=i; if(check(t)) { map[t][i]='Q'; dfs(t+1); map[t][i]='.'; } } } public static void main(String[] args) { Scanner scan=new Scanner(System.in); n=scan.nextInt(); for(int i=0;i<n;i++) for(int j=0;j<n;j++) map[i][j]='.'; dfs(0); } }