![]() |
|
Модераторы: bsa |
![]()
|
|
| persalena |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Задача следующая: Дана матрица : строк не более 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 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
persalena, если мне память не изменяет, то, обычно, матрицы делаются закольцованными (т.е. у каждого элемента матрицы 8 соседей)...
В любом случае, нет ничего проще. создаешь массив из 8 точек, которые определяют положение соседнего элемента относительно координат проверяемого минимума: (-1,1), (0,1), (1,1), (1,0), (1,-1), (0,-1), (-1,-1), (-1,0) затем вычисляешь координаты соседа и, если они допустимые, сравниваешь с текущим элементом, если недопустимые, то переходишь к следующей точке. |
|||
|
||||
| persalena |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
А вот такой вопрос: можно ли в Си сравнивать ,например, 1 элемент матрицы с -1? Чисто теоритически ведь там должен находиться какой-либо виртуальный элемент... ну мне так кажется=)
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Я не понял вопрос, но попытаюсь ответить кодом:
|
|||
|
||||
| persalena |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Ну проверили мой метод решения. Оказался неверным( Мне сказали ввести переменную К, которая будет то 1, то -1.
И сравнивать элемент с соседями по циклу в трех случаях: 1) если элемент в углу 2) если элемент сбоку 3) общий случай(когда 8 соседей) Т.е варианты ( 1.1) в правом верхнем 1.2)в правом нижнем 1.3)в левом верхнем 1.4)в левом нижнем 2.1) слева 2.2)справа 2.3)сверху 2.4)снизу) ОБОБЩИТЬ с помощью этого самого К. Вопрос: Как это возможно? |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
|
|||
|
||||
| persalena |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Ну вообщем-то я так и делала) Сказали переделать... k вставить вместо +1 и -1. и оно меняться должно в зависимости от чего-то...
|
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
можно конечно и так сделать, но не понятно, чем это принципиально отличается от первого варианта
|
|||
|
||||
| persalena |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Вот и мне тоже непонятно. Причем k должен быть только один. И как я поняла в программе будет изобилие if-ов
|
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
а если так???
Это сообщение отредактировал(а) Dmi3ev - 24.12.2008, 17:25 -------------------- |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
||||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
likehood, да я просто предложил
заодно у меня массив какой угодно (n x m), может пригодится а может и нет ... че ты глумишься ??? -------------------- |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
||||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
к вообще там ни в рот, ни в попу
likehood, да я просто прогу написал а persalena скорее всего этого и хотела... для прикола попрошу: persalena, выложи свой код, который был до нас с likehood мне просто кажется, что его нет... -------------------- |
|||
|
||||
| persalena |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 1.12.2008 Репутация: нет Всего: нет |
Добавлено через 49 секунд Тут не переделывать надо, а заново писать! Метод решения не тот. а так все работает) |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |