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 stub
System.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");
}
}
}
}
算法试验8皇后问题-回溯法 PS参考了百度的一些大神的思路
最新推荐文章于 2024-04-13 13:46:58 发布
这是一个使用Java实现的8皇后问题解决方案,通过回溯法寻找所有可能的摆放方式。程序定义了一个EightQ类,包含计数器、列数组以及获取所有排列的方法。在getArrangement方法中,通过遍历并检查每行是否合法来递归地放置皇后,当找到合法位置时更新列数组并递归到下一行。合法的棋盘布局会打印出来,并累加方案数量。
2175

被折叠的 条评论
为什么被折叠?



