在数组中存储特定的数字模式
Storing a specific number pattern in an array
我正在研究一个问题,想生成一个特定的模式
这是
1000
1100
1110
1111
0100
0110
0111
0010
0011
0001
使用递归和 for 循环,但是当我编写代码时,它在线程 "main" java.lang.WhosebugError
中给了我一个异常
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);
}
}
您可以通过修改 solveNQUtil 方法来克服错误,如下所示。 不保证您一定会得到想要的答案。
void solveNQUtil(int board[][], int col)
{
if (col == N)
return;
for (int i = 0; i < N; i++)
{
solveNQUtil(board, col + 1);
}
}
有一个递归函数,它打印出以多少个零和多少列开头的行,并让它以一个额外的前导零调用自身。另外,跟踪下一个要编辑的行。
如果前导零的数量等于列数,return因为你完成了:
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);
}
}
我正在研究一个问题,想生成一个特定的模式 这是
1000
1100
1110
1111
0100
0110
0111
0010
0011
0001
使用递归和 for 循环,但是当我编写代码时,它在线程 "main" java.lang.WhosebugError
中给了我一个异常
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);
}
}
您可以通过修改 solveNQUtil 方法来克服错误,如下所示。 不保证您一定会得到想要的答案。
void solveNQUtil(int board[][], int col)
{
if (col == N)
return;
for (int i = 0; i < N; i++)
{
solveNQUtil(board, col + 1);
}
}
有一个递归函数,它打印出以多少个零和多少列开头的行,并让它以一个额外的前导零调用自身。另外,跟踪下一个要编辑的行。
如果前导零的数量等于列数,return因为你完成了:
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);
}
}