Это проблема N Квинса, где дана доска, и вы должны использовать методы, чтобы проверить, где расположены строки, столбцы и по диагонали. Мой метод проверки строки здесь: Это работает, если вы подсчитываете Куинс в целом, но я хочу проверять только строку за строкой, сбрасывая счетчик и количество строк .
private boolean oneQueenPerRow() //ensures that there is only 1 queen in each row
{
int count = 0;
int rowcount = 0;
for (int i = 0; i < board.length; i++)
{
//count = 0;
for (int j = 0; j < board.length; j++)
{
//rowcount = 0;
while (rowcount <= size-1)
{
if (board[i][j] == QUEEN)
{
count++;
rowcount++;
}
if (board[i][j] == BLANK)
{
rowcount++;
}
}
if (count != 1) // if size replaces 1 then it works, but counts Q's as a whole
{
return false;
}
}
}
return true;
}
Идея состоит в том, что все методы возвращают true или false и затем вызываются окончательным логическим методом. Если все верно, то Правление является действительным решением. Если один из них ложный, совет не является правильным решением. Вот пример текстового файла, который мне дали:
4 BQBB BBBQ QBBB BBQB
(они должны быть сложены ..)
У меня недостаточно знаний о массивах и для циклов, чтобы сказать, идет ли это полностью через весь файл или только строку за один раз, хотя доверяйте мне, когда я говорю, что исчерпал все ресурсы.
Я работал над этим в течение нескольких дней, и я не могу понять это, и связь с моим профессором является пятнистой из-за этого вируса! Мне отчаянно нужна помощь!
private boolean noDiagonalAttacks() //makes sure that Queens cannot attack diagonally
{
for (int i = 0; i < board.length; i++)
{
int count = 0;
for (int j = 0; j < board.length; j++)
{
if (board[i][j] == QUEEN)
{
if(this.toRight() == false || this.toLeft() == false)
{
return false;
}
count++;
}
}
}
return true;
}
private boolean toRight()
{
for (int i = 0; i < board.length; i++)
{
for (int j = 0; j < board.length; j++)
{
while (board[i][j] != board[i][size-1] || board[i][j] != board[size-1][j]) //add a count to this?
{
if (board[i][j] == QUEEN)
{
return false;
}
}
}
}
return true;
}
private boolean toLeft()
{
for (int i = 0; i < board.length; i++)
{
for (int j = 0; j < board.length; j++)
{
while (board[i][j] != board[i][0] || board[i][j] != board[size-1][j])
{
if (board[i][j] == QUEEN)
{
return false;
}
}
}
}
return true;
}