N_QUEEN 发表于 2016-10-13 | 分类于 Java | | | 通过递归实现求解N皇后问题。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768import java.util.Scanner;public class N_Queen { private int n; private int[] val; public N_Queen(int n2) { n=n2; val = new int[n2];}/** * 确定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("1"+" "); continue; } System.out.print("0"+" "); } System.out.println(); } System.out.println(); } /* * test */ public static void main(String[] args){ @SuppressWarnings("resource") Scanner input = new Scanner(System.in); System.out.println("请输入皇后的数量:"); int n = input.nextInt(); N_Queen queen = new N_Queen(n); queen.traceBackQueen(0); } } 运行结果截图: