10
Объяснение:
Смотри вложение. Клетки: [B], [S] робот пройдёт более 2-х раз -> эти клетки не подойдут под условие. Почему? Потому что каждый цикл робот смещается на 3 клетки влево – через [B], в каждом цикле, робот уже проходит 2 раза, а в следующем цикле он делает это ещё раз, тем самым проваливая условие для данной клетки; [S] – аналогично, поскольку робот, в каждом цикле, пересечёт данную клетку, выходя из клетки [F] в клетку [G].
Для простоты, приведу список клеток из 2 цикла:
[G] станет [S];
[A] станет [B];
[C] станет [D];
[B] станет [E];
[S] станет [F].
Во втором цикле [G] левее на 3 клетки, а её позицию из 1 цикла, теперь, занимает клетка [S].
Нетрудно понять, что ровно 2 раза робот пройдёт только по клетке [C] – [C] станет [D] и больше не будет пройдена роботом.
Остальные клетки робот пройдёт более или менее 2 раз.
public class MyClass {
public static void main(String args[]) {
System.out.println("4, 4, 5, 5 == " + isValidMove(4, 4, 5, 5));
System.out.println("4, 4, 4, 7 == " + isValidMove(4, 4, 4, 7));
}
public static boolean isValidMove(int fromRow, int fromCol, int toRow, int toCol) {
int i;
// Попытка двинуться в то место где фигура уже стоит
if (fromRow == toRow && fromCol == toCol)
return false;
// Collision detection
if (fromRow == toRow) {
// горизонтальное движение
if (fromCol < toCol) {
// вправо
for (i = fromCol + 1; i <= toCol; ++i)
if (!isValidPosition(fromRow, i))
return false;
} else {
// влево
for (i = fromCol - 1; i >= toCol; --i)
if (!isValidPosition(fromRow, i))
return false;
}
} else if (fromCol == toCol) {
// вертикальное движение
if (fromRow < toRow) {
// движение вниз
for (i = fromRow + 1; i <= toRow; ++i)
if (!isValidPosition(i, fromCol))
return false;
} else {
// движение вверх
for (i = fromRow - 1; i >= toRow; --i)
if (!isValidPosition(i, fromCol))
return false;
}
} else {
// не валидное движение
return false;
}
return true;
}
public static boolean isValidPosition(int row, int col) {
boolean result = false;
if (row > 0 && row < 7) {
result = true;
}
if (col > 0 && col < 7) {
result = true;
}
return result;
}
}
P.S.
Не забывайте нажать " ", поставить оценку, и если ответ удовлетворил, то выберите его как "Лучший" :)