|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.06.2009, 19:03 | #1 | |
Пользователь
Регистрация: 07.06.2009
Сообщений: 43
|
Странная задача С. I курс.
Цитата:
Сначала казалось просто все... Написав Код:
Ну да Код:
Код:
Проблема собственно в выборе максимального подмножества... Ну так что - поможите? |
|
07.06.2009, 19:15 | #2 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Ну вот на уровне идеи:
нужно создать что-то вроде матрицы смежности. Допустим, у нас N окружностей. Создаем матрицу. Вначале заполняем ее прямыми связями. То есть, если i-я окружность напрямую связана с j-й, то элемент (i,j) = 1. Так заполнили матрицу. Далее проверяем непрямые связи. Берем i-ю окружность. Для нее просматриваем все остальные. Для текущей j-й проверяем оставшиеся. Если и i-я и j-я окружности пересекают k-ю, то, опять же, элемент (i,j) = 1. Все остальные ячейки будут нулями. Матрица создана. Теперь ищем первый элемент, равный нулю. Это ячейка (i1,j1). Теперь для j1 ищем такой столбец k, для которого (j1,k)=0. Ну вот так и доходим до конца, в поисках самой длинной цепочки. Думаю, идея должна быть ясна.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
07.06.2009, 19:25 | #3 |
Пользователь
Регистрация: 07.06.2009
Сообщений: 43
|
Ясно но не совсем понятно почему именоо цепочка с первым не нулевым элементом который нашелся в матрице связей будет длиннее других...
Хотя наверное возможно повторить это для всех таких элементов и посмотреть где получится больше окружностей... Но это же сколько действий! Все равно спасибо, идея интересная) Хотя и хотелось бы что то по проще) |
07.06.2009, 19:29 | #4 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Цитата:
Вообще, навскидку, это не очень сложный вариант. И действий будет не так уж много. Возможно, понадобится рекурсивная функция для конечной части (по крайней мере, я бы делал именно через рекурсию).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
07.06.2009, 19:29 | #5 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Я бы создал матрицу связности окружностей, в которой элемент[x][y] == false означает, что окружности x и y не связанные.
Заполнять её можно в 2 этапа: 1) если окружности пересекаются 2) уже по данным этой матрицы легко определяем есть ли третья окружность, которая пересекает 2 окружности. Примерно так: Код:
Допустим, это будет столбец x. Тогда: Код:
Так вот. Мне кажется, нет смысла в рекурсиях и мой вариант оптимальнее. Из условия задачи вытекает, что если окружность С не связана с окружностью А и не связана с окружностью Б, то и А не связана с Б. Таким образом, если найти такую окружность, которая не связана с бОльшим числом окружностей, то это и будет наибольшее подмножество несвязанных окружностей. Последний раз редактировалось pu4koff; 07.06.2009 в 19:40. |
07.06.2009, 20:05 | #6 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
pu4koff, так ведь нужно найти
Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
07.06.2009, 20:12 | #7 |
Пользователь
Регистрация: 07.06.2009
Сообщений: 43
|
Хмм... А если в варианте pu4koff после этого все что имеет false в строке у этой окружности опять проверять на взаимные связи - так это рекурента)
|
07.06.2009, 20:13 | #8 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
А то под это подходит и простой поиск всех нулей в матрице. А и Б не связаны, значит добавляем в подмножество, т.к. они друг с другом попарно не связаны. Нет. я в своём предположении был не прав. Сейчас на листочке нарисовал пару вариантов и 1 сработал, а во втором уже фигня получилась Последний раз редактировалось pu4koff; 07.06.2009 в 20:18. |
|
07.06.2009, 20:20 | #9 | |
Пользователь
Регистрация: 07.06.2009
Сообщений: 43
|
Цитата:
|
|
07.06.2009, 20:33 | #10 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Вот:
Как я понял, одна из самых длинных цепочек будет 1 -> 4 -> 8, т.к. они попарно не связаны.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Странная задача | ARF_name | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 29.04.2009 11:24 |
Странная загрузка | Лубышев | Операционные системы общие вопросы | 9 | 17.03.2008 09:24 |
Не вижу ошибку...помогите. 1 курс задача на Си | good_andy | Помощь студентам | 6 | 02.01.2008 10:01 |
Странная реакция | drknn | Помощь студентам | 2 | 02.09.2007 15:51 |
Странная ошибка | Washington | БД в Delphi | 2 | 16.03.2007 18:13 |