У меня есть некоторые проблемы на codefights.com, и я не могу понять, почему мой код работает так, как он есть.
https://codefightssolver.wordpress.com/2016/11/09/minesweeper/
^^^ Есть ссылка на чей-то блог, содержащий дословное приглашение. Я не уверен, что вы можете увидеть вызов на codefights, если вы не вошли в систему.
int[][] minesweeper(bool[][] matrix)
{
int[][] mineField = new int[matrix.Length][];
int[] mineLine = new int[matrix[0].Length];
for (int i = 0; i < mineLine.Length; i++) { mineLine[i] = 0; }
for (int i = 0; i < mineField.Length; i++) { mineField[i] = mineLine; }
for (int i = 0; i < mineField.Length; i++)
{
for (int j = 0; j < mineField[0].Length; j++)
{
mineField[i][j] = findBorderMines(matrix, i, j);
Console.Write(mineField[i][j]);
}
Console.WriteLine();
}
return mineField;
}
int findBorderMines(bool[][] matrix, int x, int y)
{
int minX = x - 1; if (minX < 0) minX = 0;
int minY = y - 1; if (minY < 0) minY = 0;
int maxX = x + 1; if (maxX > matrix.Length - 1) maxX = matrix.Length - 1;
int maxY = y + 1; if (maxY > matrix[0].Length - 1) maxY = matrix[0].Length - 1;
int borderingMines = 0;
for (int i = minX; i <= maxX; i++)
{
int j = minY;
for (; j <= maxY; j++)
{
//Console.WriteLine(i + " " + j);
if (matrix[i][j] == true && !(i == x && j == y)) { borderingMines++; }
}
}
return borderingMines;
}
^^^ Это мой полный код. Я знаю, что это не самое элегантное решение, но я не ищу это прямо сейчас. Моя проблема (я думаю) касается кода ниже vvv
for (int i = 0; i < mineField.Length; i++)
{
for (int j = 0; j < mineField[0].Length; j++)
{
mineField[i][j] = findBorderMines(matrix, i, j);
Console.Write(mineField[i][j]);
}
Console.WriteLine();
}
return mineField;
Линии записи отображают правильную матрицу, но когда я возвращаю полученную матрицу, все строки в матрице волшебным образом преобразуются в последнюю строку matirx. Что мне не хватает? Я надеюсь, что этой информации достаточно, чтобы понять, что я облажался, но я никогда не идеал, чтобы свести мои глупые вопросы к одному сообщению на форуме.