递归与回溯:八皇后问题

来源:互联网 发布:淘宝app比网页安全多少 编辑:程序博客网 时间:2024/05/16 08:04
使用回溯方法解决八皇后问题:
/** * 回溯法 * @author acer * */public class Queens {final boolean available=true;final int squares=4,norm=squares-1;int[] positionInRow=new int[squares];boolean[] column=new boolean[squares];boolean[] leftDiagonal=new boolean[squares*2-1];boolean[] rightDiagonal=new boolean[squares*2-1];public Queens(){for(int i=0;i<squares;i++){positionInRow[i]=-1;column[i]=available;}for(int i=0;i<2*squares-1;i++){leftDiagonal[i]=rightDiagonal[i]=available;}}public void printBoard(){for(int row=0;row<squares;row++){for(int col=0;col<squares;col++){if(positionInRow[row]==col){System.out.print("1");}else{System.out.print("0");}}System.out.println();}}/** * 回溯法放置皇后 * @param row */public void putQueen(int row){for(int col=0;col<squares;col++){if(column[col]==available&&leftDiagonal[row+col]==available&&rightDiagonal[row-col+norm]==available){positionInRow[row]=col;column[col]=!available;leftDiagonal[row+col]=!available;rightDiagonal[row-col+norm]=!available;if(row<squares-1){putQueen(row+1);}//回溯时取走皇后column[col]=available;leftDiagonal[row+col]=available;rightDiagonal[row-col+norm]=available;}}}public static void main(String[] args) {Queens queens=new Queens();queens.putQueen(0);queens.printBoard();}}

0 0
原创粉丝点击