在8×8的棋盘上,放置8个皇后(棋子),使两两之间互不攻击。所谓互不攻击是说任何两个皇后都要满足:
(1)不在棋盘的同一行;
(2)不在棋盘的同一列;
(3)不在棋盘的同一对角线上。
因此可以推论出,棋盘共有8行,故至多有8个皇后,即每一行有且仅有一个皇后。这8个皇后中的每一个应该摆放在哪一列上是解该题的任务。
1 import java.math.BigInteger; 2 import java.util.Arrays; 3 import java.util.Scanner; 4 5 6 public class Main { 7 public static int[] lie = new int[9]; 8 public static int[] leftup = new int[16]; 9 public static int[] leftdown = new int[16]; 10 public static int sum; 11 public static void main(String[] args) { 12 f(1); 13 System.out.println(sum); 14 } 15 public static void f(int i){ 16 if(i>8){ 17 sum++; 18 }else{ 19 for(int j=1;j<=8;j++){ 20 if(lie[j]==0&&leftup[i+j-1]==0&&leftdown[i-j+8]==0){ 21 lie[j] = 1; 22 leftup[i+j-1] = 1; 23 leftdown[i-j+8] = 1; 24 f(i+1); 25 lie[j] = 0; 26 leftup[i+j-1] = 0; 27 leftdown[i-j+8] = 0; 28 } 29 } 30 } 31 } 32 }