算法试验8皇后问题-回溯法 PS参考了百度的一些大神的思路

来源:互联网 发布:window socket 编程 编辑:程序博客网 时间:2024/05/21 12:41
package com.shiyan1;public class EightQ {public static void main(String[] args) {EightQ queen=new EightQ();}public static int countNum=0;//方案数public static int queenNum=8;//皇后数(矩阵行列数)public static int cols[]=new int[queenNum];//定义摆法public EightQ(){getArrangement(0);//System.out.println("/n");System.out.println(queenNum+"皇后问题有"+countNum+"摆法!");}private void getArrangement(int n) {// TODO Auto-generated method stub//遍历该列所有不合法的行,并用rows数组记录,不合法记row[i]=true;boolean rows[]=new boolean[queenNum];for(int i=0;i<n;i++){rows[cols[i]]=true;int d=n-i;if(cols[i]-d>=0){rows[cols[i]-d]=true;}if(cols[i]+d<=queenNum-1){rows[cols[i]+d]=true;}}for(int i=0;i<queenNum;i++){//判断该行是否合法if(rows[i])continue;//设置当前列合法棋子所在行数cols[n]=i;//当前列不为最后一列时if(n<queenNum-1){getArrangement(n+1);}else{//累计方案个数countNum++;//打印棋盘信息printChessBoard();}}}private void printChessBoard() {// TODO Auto-generated method stubSystem.out.println("第"+countNum+"种走法");for(int i=0;i<queenNum;i++){for(int j=0;j<queenNum;j++){if(i==cols[j]){System.out.print("Q");}else{System.out.print("*");}//System.out.print("/n");}}}}

0 0
原创粉丝点击