N皇后问题采用回溯算法是经典的解决方案,回溯可以用栈来实现,递归本身就具有回溯的功能,下面程序采用递归实现。 public class Queen { private static final int n = 6; private static int[] val = new int[n]; /** * 确定r行已放置的皇后是否可以 * @param r:行号 */ public boolean isPlace(int r){ boolean b = true; for(int i = 0; i < r; i++){ if (val[r] == val[i] || Math.abs(val[r] - val[i]) == Math.abs(r -i)) { b = false; break; } } return b; } /** * 递归法实现N皇后问题,确定每一行皇后放置位置 * @param r:行号,从0到n-1 */ public void traceBackQueen(int r) { if (r == n) { print(); }else { for (int i = 0; i < n; i++) { val[r] = i; if (isPlace(r)) { traceBackQueen(r+1); } } } } /** * 打印结果 */ public void print(){ for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j == val[i]) { System.out.print("("+ i + "," + j +")" + "/t"); } } } System.out.println(); } /* * test */ public static void main(String[] args){ Queen queen = new Queen(); queen.traceBackQueen(0); } }