理论;
在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
解法(回溯法):
java解法;
package 经典; public class EightQueen2{ public static final int MAX=8; public static int num=0; public static int[] queen=new int[MAX]; public static void main(String []args){ EightQueen2 queen=new EightQueen2(); queen.backTrack(0); } public boolean place(int n){ for(int i=0; i<n; i++) { if(queen[i]==queen[n] || Math.abs(queen[i]-queen[n])==(n-i)) return false; } return true; } public void backTrack(int n){ for(int i=0; i<MAX; i++) { queen[n]=i; if(place(n)) { if(n==MAX-1) showAnswer(); else { backTrack(n+1); } } } } private void showAnswer() { // TODO Auto-generated method stub ++num; System.out.println("解答:"+num); for(int i=0; i<MAX; i++) { for(int j=0; j<MAX; j++) { if(queen[i]==j) System.out.print("Q"); else System.out.print(" . "); } System.out.println(); } } }