我对此代码有问题,当我使用true-false语句时,我得到的输出是不同的;当我使用0-1而不是true-false时,我得到的答案是不同的。但是两个答案只有在可能性不同的情况下才是正确的。
在isattacken函数中使用true-false语句
import java.util.*;
import java.io.*;
class Main
{
public static int n;
public static int[][] board = new int[100][100];
public static boolean isattacken (int i, int j)
{
int k, l;
for (k = 0; k < n; k++)
{
if ((board[i][k] == 1) || (board[k][j] == 1))
return true;
}
for (k = 0; k < n; k++)
{
for (l = 0; l < n; l++)
{
if (((k + l) == (i + j)) || ((k - l) == (i - j)))
{
if (board[k][l] == 1)
return true;
}
}
}
return false;
}
public static int nqueen (int no)
{
if (no == 0)
return 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{ if (!(isattacken (i, j)) && (board[i][j] != 1))
{
board[i][j] = 1;
if (nqueen (no - 1) == 1)
{
return 1;
}
board[i][j] = 0;
}
}
}
return 0;
}
public static void main (String[]args)
{
Scanner s = new Scanner (System.in);
System.out.println ("Enter n");
n = s.nextInt ();
nqueen (n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
System.out.print (board[i][j] + "\t");
}System.out.println();
}
}
}
在isattacken函数中使用0和1
import java.util.*;
import java.io.*;
class Main
{
public static int n;
public static int[][] board = new int[100][100];
public static int isattacken (int i, int j)
{
int k, l;
for (k = 0; k < n; k++)
{
if ((board[i][k] == 1) || (board[k][j] == 1))
return 1;
}
for (k = 0; k < n; k++)
{
for (l = 0; l < n; l++)
{
if (((k + l) == (i + j)) || ((k - l) == (i - j)))
{
if (board[k][l] == 1)
return 1;
}
}
}
return 0;
}
public static int nqueen (int no)
{
if (no == 0)
return 1;
for (int i = 0; i < no; i++)
{
for (int j = 0; j < n; j++)
{
if ((isattacken (i, j))!=1 && (board[i][j] != 1))
{
board[i][j] = 1;
if (nqueen (no - 1) == 1)
{
return 1;
}
board[i][j] = 0;
}
}
}
return 0;
}
public static void main (String[] args)
{
Scanner s = new Scanner (System.in);
System.out.println ("Enter n");
n = s.nextInt ();
nqueen(n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
System.out.print (board[i][j] + "\t");
}System.out.println();
}
}
}
根据两者,代码输出应该相同,但是输出却不同。