皇后问题
来源:百度文库 编辑:神马文学网 时间:2024/04/21 00:35:40
public class Queen { private char[][] matrix; private int size; private int[] position; private int result; public int getResult() { return result; } public Queen(int size) { this.size = size; matrix = new char[size][size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { matrix[i][j] = ‘x‘; } } position = new int[size]; } private void printMatrix() { System.out.printf("---- sulution %d ----\n", result); for (int i = 0; i < size; i++) { System.out.print("{"); for (int j = 0; j < size - 1; j++) System.out.print(matrix[i][j] + " "); System.out.print(matrix[i][size - 1]); System.out.println("}"); } } private boolean isValid(int row, int col) { for (int i = 0; i < row; i++) { if (position[i] == position[row]) { return false; } if (Math.abs(position[i] - position[row]) == row - i) { return false; } } return true; } public void trial(int row) { for (int i = 0; i < size; i++) { matrix[row][i] = ‘.‘; position[row] = i; if (isValid(row, position[row])) { if (row < size - 1) { trial(row + 1); } else { /* success */ result++; printMatrix(); } } matrix[row][i] = ‘x‘; } } public static void main(String[] args) { Queen test = new Queen(4); test.trial(0); System.out.printf("result is: %d", test.getResult()); } }