八皇后问题

在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 }

 

posted @ 2017-03-22 16:06  来一点音乐  阅读(331)  评论(1编辑  收藏  举报