![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Здравствуйте, уважаемые форумчане.
Столкнулся с задачкой, над которой бьюсь уже пару недель с попеременным успехом. Условие звучит так: На вход программы подаётся квадратная матрица M порядка N (Mij равно 0 или 1). Матрица вводится в виде списка из N строк матрицы, где каждая строка - это список из N элементов матрицы. Затем задаётся положительное целое число K. Можно ли покрыть все единичные элементы матрицы M не более чем K прямоугольниками? Другими словами, существует ли такая последовательность четвёрок (ai, bi, ci, di) (1 ≤ i ≤ K, 1 ≤ ai, bi, ci, di ≤ N, ai ≤ ci, bi ≤ di), в которой ai, ci - это номера строк матрицы, а bi, di - номера столбцов. Эта последовательность должна удовлетворять условию, что любой единичный элемент матрицы должен покрываться хотя бы одним прямоугольником, и любой прямоугольник должен состоять только из единиц. Если такого покрытия не существует, напечатайте "False". Если покрытие существует, напечатайте "True", затем количество прямоугольников, а затем список описаний прямоугольников. Каждое описание прямоугольника представляет собой список из 4 элементов как описано выше. Пример: Входные: ((1 0) (0 1)) 2 Выходные: True 2 ((1 1 1 1) (2 2 2 2)) Основывался на идее решения http://forum.vingrad.ru/forum/topic-341571.html. Черновое решение (Delphi XE6) во вложении. Оно, кхм, не находит ответ (для фиксированного условия: ((1 1 1 0 1 1 1) (1 1 1 0 1 1 1) (1 1 1 1 1 1 1) (0 0 1 1 1 0 0) (1 1 1 1 1 1 1) (1 1 1 0 1 1 1) (1 1 1 0 1 1 1)) K = 5). Проблемы, скорее всего, заключаются в фит-функции и мутировании, но после чтения ~5 статеек в интернете так и не придумал ничего лучше.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 10.11.2014 в 12:49. |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Фигасе. Эт если ты над ней бьешься то что будет со мной, матемадвоешником? Конвульсии наверное
![]()
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,434
|
![]()
По сути у вас есть матрица:
00000000 00111100 00111100 00111100 00000000 И ваш алгоритм должен распознать там фигуру из единиц, так? Почему бы не применить тот же волновой алгоритм? Аля умное выделение фрагмента изображения из множества изображений в одной картинке, только на автомате начинающее работать от центра картинки. Пример 1(искать Magic Wand) только определите для программы минимальные размеры размеры прямоугольника, ибо 2x2 это уже квадрат, а 1x1 просто точка, и основные правила этого объека(все стороны прямые, хотябы). или задача в том и состоит, чтобы конкретный алгоритм применить? Последний раз редактировалось Человек_Борща; 10.11.2014 в 13:32. |
![]() |
![]() |
![]() |
#4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,430
|
![]()
Stilet, ну так я тоже не особо математически подкован (всякие вероятности не рассчитывал для задания размера популяции).
Человек_Борща, да и рад бы применить другой алгоритм, но использование именно генетического - обязательное требование. Дополнительную сложность добавляет вариант, когда решением является множество пересекающихся прямоугольников. Например: 11111100111111 11111100111111 11111100111111 11111111111111 11111111111111 00001111110000 00001111110000 00001111110000
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 10.11.2014 в 13:42. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Генетический алгоритм | nudist | Общие вопросы Delphi | 2 | 28.02.2014 21:18 |
Генетический алгоритм | CannibalCorpse | Общие вопросы Delphi | 0 | 13.04.2012 15:48 |
Безнадежная тема.. алгоритм покрытия | kypck | Общие вопросы C/C++ | 1 | 08.03.2012 20:51 |
Генетический алгоритм | Sparky | Помощь студентам | 5 | 16.12.2011 20:32 |
Генетический Алгоритм | rust09reg91 | Общие вопросы Delphi | 2 | 03.04.2011 16:03 |