| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Найти максимум из всех локальных минимумов матрицы |
| Автор: persalena 10.12.2008, 16:34 |
| Задача следующая: Дана матрица : строк не более 12, столбцов не более 10. Нужно найти максимум из всех локальных минимумов. Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. (соседи - элементы окружающие задынный элемент. Т.е. если элемент стоит, например, в центре, то у него 8 соседей, если в углу - то 3, и если просто скраю, то 5) Вопрос заключается в следующем: Я создаю подпрограмму для нахождения локального минимума. Мне приходится его сравнивать со всеми окружающими его элементами через if, и при этом еще разбить на несколько случаев: 1) если элемент в углу 1.1) в правом верхнем 1.2)в правом нижнем 1.3)в левом верхнем 1.4)в левом нижнем 2) если элемент сбоку: 2.1) слева 2.2)справа 2.3)сверху 2.4)снизу 3) общий случай(когда 8 соседей) Можно ли каким-то образом упростить этот алгоритм? Вообщем то я уверена, что можно, но как именно, додуматься не могу. Помогите пожалуйста какими-нибудь идейками. |
| Автор: bsa 10.12.2008, 16:45 |
| persalena, если мне память не изменяет, то, обычно, матрицы делаются закольцованными (т.е. у каждого элемента матрицы 8 соседей)... В любом случае, нет ничего проще. создаешь массив из 8 точек, которые определяют положение соседнего элемента относительно координат проверяемого минимума: (-1,1), (0,1), (1,1), (1,0), (1,-1), (0,-1), (-1,-1), (-1,0) затем вычисляешь координаты соседа и, если они допустимые, сравниваешь с текущим элементом, если недопустимые, то переходишь к следующей точке. |
| Автор: persalena 11.12.2008, 18:23 |
| А вот такой вопрос: можно ли в Си сравнивать ,например, 1 элемент матрицы с -1? Чисто теоритически ведь там должен находиться какой-либо виртуальный элемент... ну мне так кажется=) |
| Автор: bsa 11.12.2008, 18:49 | ||
Я не понял вопрос, но попытаюсь ответить кодом:
|
| Автор: persalena 24.12.2008, 15:56 |
| Ну проверили мой метод решения. Оказался неверным( Мне сказали ввести переменную К, которая будет то 1, то -1. И сравнивать элемент с соседями по циклу в трех случаях: 1) если элемент в углу 2) если элемент сбоку 3) общий случай(когда 8 соседей) Т.е варианты ( 1.1) в правом верхнем 1.2)в правом нижнем 1.3)в левом верхнем 1.4)в левом нижнем 2.1) слева 2.2)справа 2.3)сверху 2.4)снизу) ОБОБЩИТЬ с помощью этого самого К. Вопрос: Как это возможно? |
| Автор: likehood 24.12.2008, 16:34 | ||
|
| Автор: persalena 24.12.2008, 17:03 |
| Ну вообщем-то я так и делала) Сказали переделать... k вставить вместо +1 и -1. и оно меняться должно в зависимости от чего-то... |
| Автор: likehood 24.12.2008, 17:09 | ||
можно конечно и так сделать, но не понятно, чем это принципиально отличается от первого варианта
|
| Автор: persalena 24.12.2008, 17:12 |
| Вот и мне тоже непонятно. Причем k должен быть только один. И как я поняла в программе будет изобилие if-ов |
| Автор: Dmi3ev 24.12.2008, 17:25 | ||
а если так???
|
| Автор: likehood 24.12.2008, 17:30 |
Добавлено через 1 минуту и 19 секунд лучше тогда вот так: const int odin = 1; |
| Автор: Dmi3ev 24.12.2008, 17:35 |
| likehood, да я просто предложил заодно у меня массив какой угодно (n x m), может пригодится а может и нет ... че ты глумишься ??? |
| Автор: likehood 24.12.2008, 17:53 |
забей просто понравилось как ты выполнил требование использовать переменную k |
| Автор: Dmi3ev 24.12.2008, 18:17 |
| к вообще там ни в рот, ни в попу likehood, да я просто прогу написал а persalena скорее всего этого и хотела... для прикола попрошу: persalena, выложи свой код, который был до нас с likehood мне просто кажется, что его нет... |
| Автор: persalena 24.12.2008, 18:30 | ||
Добавлено через 49 секунд Тут не переделывать надо, а заново писать! Метод решения не тот. а так все работает) |
| Автор: Dmi3ev 24.12.2008, 19:59 | ||
| persalena, извиняюсь за
просто здесь много залётных, которые словами бросаются, я это, я то, но не получается ничего, а на самом деле ничего и нет... |