问题描述
我正在使用回溯在 Java 中解决著名的 N-Queen 程序。 为了检查回溯的条件,我声明了三个布尔数组,其中 我在布尔数组中遇到编译错误以检查第一个条件,即)左行布尔数组。
问题链接:[N-Queen 问题][1]
class Solution{
static ArrayList<ArrayList<Integer>> nQueen(int n) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
boolean leftRow[] == new boolean[n];
boolean leftDiagonal[] = new boolean[2*n];
boolean rightDiagonal[] = new boolean[2*n];
ArrayList<Integer> curr = new ArrayList<>();
solve( result,n,curr,leftRow,leftDiagonal,rightDiagonal);
return result;
}
private void solve(ArrayList<ArrayList<Integer>> result,int n,int row,ArrayList<Integer> curr,boolean leftRow[],boolean leftDiagonal[],boolean rightDiagonal[]){
if( row == n){
result.add(new ArrayList<>(curr));
return;
}
for(int col=0; col<n;r++){
if( leftRow[col] || leftDiagonal[row + col] || rightDiagonal[row -col+n])
continue;
leftRow[col] = leftDiagonal[row+col] = rightDiagonal[row-col+n] = true;
curr.set(col,row+1);
solve(result,row+1,rightDiagonal);
leftRow[col] = leftDiagonal[row+col] = rightDiagonal[row-col+n] = false;
}
}
}```
Error
> Compilation Error
prog.java:41: error: ';' expected
boolean leftRow[] == new boolean[n];
^
prog.java:41: error: not a statement
boolean leftRow[] == new boolean[n];
^
2 errors
Thanks in advance :)
[1]: https://practice.geeksforgeeks.org/problems/n-queen-problem0315/1#
解决方法
如果你看看这一行,你可能会发现你把两个等号而不是一个:
boolean leftRow[] == new boolean[n];
由于这不是一个正确的声明语句,它会引发错误。
,这是我发现的错误:
- 第 5 行:您使用 == 而不是 =
- 第 15 行:您只能从静态上下文中引用静态上下文(您应该将静态添加到方法签名中
- 修复了代码中的一些拼写错误
如果你编译这段代码它会失败,但由于我不知道预期的结果是什么,我会保持原样
import java.util.ArrayList;
public class Tester{
public static void main(String args[]){
System.out.println(Solution.nQueen(15));
}
}
class Solution{
static ArrayList<ArrayList<Integer>> nQueen(int n) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
boolean leftRow[] = new boolean[n];
boolean leftDiagonal[] = new boolean[2*n];
boolean rightDiagonal[] = new boolean[2*n];
ArrayList<Integer> curr = new ArrayList<>();
solve( result,n,curr,leftRow,leftDiagonal,rightDiagonal);
return result;
}
private static void solve(ArrayList<ArrayList<Integer>> result,int n,int row,ArrayList<Integer> curr,boolean leftRow[],boolean leftDiagonal[],boolean rightDiagonal[]){
if( row == n){
result.add(new ArrayList<>(curr));
return;
}
for(int col=0; col<n;row++){
if( leftRow[col] || leftDiagonal[col] || rightDiagonal[col])
continue;
leftRow[col] = leftDiagonal[col] = rightDiagonal[col] = true;
curr.set(col,row+1);
solve(result,row+1,rightDiagonal);
leftRow[col] = leftDiagonal[col] = rightDiagonal[col] = false;
}
}
}