java 八皇后问题 递归 回溯

这是我写的代码,结果是错的,但我找不出来,求助

public class Queen8 {
int [] cols = new int [8];
int count;

void Queen8(){
System.out.println("八皇后问题:");
count = 0;
}

boolean checkit(int n){
for(int i=0;i<n;i++){
if(cols[i]==cols[n] || Math.abs(cols[i]-cols[n]) == Math.abs(i-n)){
return false;
}
}
return true;
}

void backTrace(int rank){
if(rank < 7){
for(int j=0;j<8;j++){
cols[rank] = j;
if(checkit(rank)){
rank++;
backTrace(rank);
}
}
}
else{
count++;
System.out.println("方法数"+ count + "\n<=====================>");
printQueen(cols);
}
}

void printQueen(int [] a){
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
if(cols[j]==i){
System.out.print("0");
}
else{
System.out.print("+");
}
}
System.out.println();
}
}
}

你main方法也没有加上,这样吧,我给你看代码,这个比较容易理解。

package com.aice.queen;
public class Queen{
//同栏是否有皇后,1表示有
private int[]column;
 
//右上至左下是否有皇后
private int[]rup;
 
//左上至右下是否有皇后
private int[]lup;
 
//解答
private int[]queen;
 
//解答编号
private int num;
 
public Queen(){
column = new int[8+1];
rup =new int[(2*8)+1];
lup = new int[(2*8)+1];
 
for(int i = 1;i<=8;i++)
column[i]=1;
for(int i = 1;i<=(2*8);i++)
rup[i] = lup[i] = 1;
queen = new int[8+1];
}
 
public void backtrack(int i){
if(i>8){
showAnswer();
}else{
for(int j=1;j<=8;j++){
if((column[j]==1)&&(rup[i+j]==1)&&
(lup[i-j+8]==1)){
queen[i]=j;
//设定为占用
column[j]=rup[i+j]=lup[i-j+8]=0;
backtrack(i+1);
column[j]=rup[i+j]=lup[i-j+8]=1;
}
}
}
}
 
protected void showAnswer(){
num++;
System.out.println("\n解答"+num);
 
for(int y=1;y<=8;y++){
for(int x=1;x<=8;x++){
if(queen[y]==x){
System.out.print("Q");
}else{
System.out.print(".");
}
}
System.out.println();
}
}
 
public static void main(String[]args){
Queen queen = new Queen();
queen.backtrack(1);
}
}

温馨提示:答案为网友推荐,仅供参考
相似回答