Найти ошибку в методе поиска локального минимума в двухмерном массиве - C#
Формулировка задачи:
Задача по поиску локального минимума в двумерном массиве. Локальным минимумом считается значение, которое строго меньше всех его соседей. Проверку на локальный минимум реализовал в отдельном методе, вот он:
В результате выходит совсем не то. Пожалуйста, помогите разобраться, где я накосячил. Не ругайте особо, самообучаюсь.
private bool IsLocalMin(sbyte i, sbyte j, int[,] m) { sbyte IMinus = Convert.ToSByte(i - 1); sbyte JMinus = Convert.ToSByte(j - 1); sbyte IPlus = Convert.ToSByte(i + 1); sbyte JPlus = Convert.ToSByte(j + 1); int a = m[i, j]; if (((IMinus >= 0) && (JMinus >= 0)) && ((IPlus <= (m.GetLength(0) - 2)) && (JPlus <= (m.GetLength(1) - 2)))) //проверка не в углах и не по краям { for (sbyte x = IMinus; x < IPlus; x++) for (sbyte y = JMinus; y < JPlus; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } if ((IMinus < 0) | (JMinus < 0)) //проверка по краям и в углу слева вверху { if ((IMinus < 0) && (JMinus < 0)) { for (sbyte x = i; x < IPlus+1; x++) for (sbyte y = j; y < JPlus+1; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } else if ((JMinus < 0) && (IMinus >= 0)) { if (IPlus <= (m.GetLength(0) - 1)) { for (sbyte x = i; x < IPlus; x++) for (sbyte y = j; y < JPlus; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } else { for (sbyte x = i; x < IPlus; x++) for (sbyte y = JMinus; y < JPlus; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } } else if ((IMinus < 0) && (JMinus >= 0)) { if (JPlus <= (m.GetLength(1)) - 1) { for (sbyte x = i; x < IPlus; x++) for (sbyte y = j; y < JPlus; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } else { for (sbyte x = i; x < IPlus; x++) for (sbyte y = JMinus; y < j; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } } } if ((IPlus > (m.GetLength(0) - 1)) | (JPlus > (m.GetLength(1) - 1))) //проверка по краям и в углу снизу справа { sbyte LenI = Convert.ToSByte(m.GetLength(0) - 1); sbyte LenJ = Convert.ToSByte(m.GetLength(1) - 1); if ((IPlus > LenI) && (JPlus > LenJ)) { for (sbyte x = IMinus; x < i; x++) for (sbyte y = JMinus; y < j; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } else if ((JPlus > LenJ) && (IPlus <= LenI)) { for (sbyte x = IMinus; x < IPlus; x++) for (sbyte y = JMinus; y < j; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } else { for (sbyte x = IMinus; x < i; x++) for (sbyte y = JMinus; y < JPlus; y++) if ((a >= m[x, y]) && (x != i) && (y != j)) return false; return true; } } return false; }
Решение задачи: «Найти ошибку в методе поиска локального минимума в двухмерном массиве»
textual
Листинг программы
var list = new List<Tuple<int, int>>();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д