您可以通过如下修改resolveNQUtil方法来克服该错误。 不保证您将获得所需的答案。
我正在研究一个问题,想生成一个特定的模式这是>
1000 1100 1110 1111 0100 0110 0111 0010 0011 0001
使用递归和for循环,但是当我编写代码时,它在线程“ main” java.lang.StackOverflowError中给了我异常
public class NQueenProblem {
final static int N = 8;
void printSolution(int board[][])
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
System.out.print(" "+board[i][j]+" ");
System.out.println();
}
}
void solveNQUtil(int board[][], int col)
{
for (int i = 0; i < N; i++) {
solveNQUtil(board, col + 1);
}
}
public static void main(String[] args) {
NQueenProblem Queen = new NQueenProblem();
int board[][] = new int[N][N];
Queen.solveNQUtil(board, 0);
}
}
我正在研究一个问题,并希望使用递归和for循环生成一个特定的模式,即1000 1100 1110 1111 0100 0110 0111 0010 0011 0001,但是当我编写代码时,它给了我一个...]]] >>
您可以通过如下修改resolveNQUtil方法来克服该错误。 不保证您将获得所需的答案。
void solveNQUtil(int board[][], int col)
{
if (col == N)
return;
for (int i = 0; i < N; i++)
{
solveNQUtil(board, col + 1);
}
}
具有一个递归函数,该函数可打印出以许多零和许多列开头的行,并以一个额外的前导零来调用自身。另外,请跟踪接下来要编辑的行。
如果前导零的数量等于列的数量,请返回,因为您已完成:
public class NQueenProblem {
static void printSolution(int board[][])
{
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++)
System.out.print(" "+board[i][j]+" ");
System.out.println();
}
}
static void solveNQUtil(int leadingZeros, int startingRow, int board[][])
{
int columns = board[0].length;
if (leadingZeros == columns) return;
for (int ones = 1; leadingZeros+ones <= columns ; ones++)
{
int curRow = startingRow + ones - 1;
for (int i=0 ; i<ones ; i++) board[curRow][i+leadingZeros] = 1;
}
solveNQUtil(leadingZeros + 1, startingRow + columns - leadingZeros, board);
}
public static void main(String[] args)
{
int totalColumns = 4;
int rows = (int)((totalColumns+1)*totalColumns*0.5); //
int board[][] = new int[rows][totalColumns];
solveNQUtil(0, 0, board);
printSolution(board);
}
}
您可以通过如下修改resolveNQUtil方法来克服该错误。 不保证您将获得所需的答案。
具有一个递归函数,该函数可打印出以许多零和许多列开头的行,并以一个额外的前导零来调用自身。另外,请跟踪接下来要编辑的行。
如果前导零的数量等于列的数量,请返回,因为您已完成: