843. n-皇后問題(dfs+輸出各類狀況)

n-皇后問題是指將 n 個皇后放在 n∗n 的國際象棋棋盤上,使得皇后不能相互攻擊到,即任意兩個皇后都不能處於同一行、同一列或同一斜線上。css

1_597ec77c49-8-queens.png

如今給定整數n,請你輸出全部的知足條件的棋子擺法。java

輸入格式

共一行,包含整數n。數組

輸出格式

每一個解決方案佔n行,每行輸出一個長度爲n的字符串,用來表示完整的棋盤狀態。spa

其中」.」表示某一個位置的方格狀態爲空,」Q」表示某一個位置的方格上擺着皇后。code

每一個方案輸出完成後,輸出一個空行。xml

數據範圍

1n91≤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); } }
相關文章
相關標籤/搜索