|
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
FAQ по графам08.04.2010, 19:30. Показов 112065. Ответов 30
Иногда на форуме появляются просьбы решить задачу на теорию графов. На теории такие задачи решаются не так уж и сложно, ведь сколько существует различных теорем, гипотез и так далее. Но когда дело доходит до программной реализации - возникают трудности. Поскольку теория графов является не только одной из сложных тем в высшей математике, но ещё сложнее реализовать какой-нибудь алгоритм на языке программирования. Также это излюбленная тема в олимпиадном программировании, поэтому данный материал также будет полезен не только для учащихся технических ВУЗов, но и для участников всевозможных олимпиад по информатике (я сам таковым являюсь
). Поэтому я решил создать мини-FAQ по графам, куда буду выкладывть основные алгоритмы и программы в данной теме,а по мере возможности тема будет расширяться новым материалом. Если у вас есть предложения по развитию этого FAQ или у вас есть подходящие материалы, то пишите мне в ЛС. Рассмотрю всё ![]() Итак, начнём. ![]() 1) ПЕРЕД ТЕМ, КАК ЧИТАТЬ ДАЛЬШЕ Для решения задач следует понимать, что представляет из себя граф. http://ru.wikipedia.org/wiki/Граф_(математика) 2) СПОСОБ ХРАНЕНИЯ ГРАФОВ В ПАМЯТИ. Чаще всего используют два способа хранения:
sp[i,1] — от какой вершины отходит ребро i sp[i,2] — к какой вершине приходит ребро i; Отдельно можно завести массив P(M), где P[i] будет хранить вес ребра i;
3)ВВОД И ВЫВОД По умолчанию в программах будет рассматриваться ввод с клавиатуры. Я не стану пока описывать процедуры чтения из файла, так как в разных задачах структура файла бывает разной. Но стоит лишь немного изменить нижеприложенные процедуры, как будет получена возможность чтения из файла.
4) ОСНОВНЫЕ АЛГОРИТМЫ
5) ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ НА ГРАФЫ 1) Дано N городов, некоторые из них соединены двусторонними дорогами. Проезда по каждой дороге имеет свою стоимость. Необходимо составить программу, которая по заданной таблице истинности находит путь от города S1 до города S2, суммарная стоимость которая будет минимальна. Формат входных данных: на вход подаётся файл, содержащий в первой строке N. S1 и S2. (1<=N<=50, 1<=S1<=N, 1<=S2<=N). Затем в следующих N строках идут числа, описывающие очередную строку матрицы смежности. Формат выходных данных: на экран вывести города, которые следуют в искомом пути. Пример:
Решение: наиболее удачным и быстродейственным способом нахождения пути от одного пункта к другому является метод Дейкстры, которая ищет минимальные расстояния от какой-то заданной точки до всех остальных. В алгоритме заведём массив предков P(N), который будет содержать минимальный путь, где P[I] - точка, от которой пришли в I по найденному минимальному пути. P[S] будет равно нулю, если S - корневая вершина (от которой и ищем пути). Код программы:
49
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 08.04.2010, 19:30 | |
|
Ответы с готовыми решениями:
30
Чем определяется одинаковость урлов /page?FAQ и /page.php?FAQ Книги по графам книги по графам |
|
13 / 5 / 0
Регистрация: 15.11.2015
Сообщений: 57
|
|
| 20.11.2015, 09:08 | |
|
Уважаемый Ромаха, спасибо, что откликнулись!
Головоломка "игра в восемь" на поле 3x3 - одна из первых задач эвристического поиска и допускает решение поиском в глубину (DFS = Depth-first search) с использованием "тупого рекурсивного перебора". Но, признаюсь, работать с графами никогда не доводилось, а тут прочитал в книжке: Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: Построение и анализ. Часть VI. Алгоритмы для работы с графами. 22.3. Поиск в глубину (DFS). ...В отличие от поиска в ширину, где подграф предшествования образует дерево, при поиске в глубину подграф предшествования может состоять из нескольких деревьев, так как поиск может выполняться из нескольких исходных вершин... На рис. 22.4 проиллюстрировано выполнение процедуры DFS над графом, приведенном на рис. 22.2... Согласитесь – заманчивые слова :-) Но не смог даже сделать первый шаг – нарисовать граф :-( Вот и стало интересно – насколько наглядное изображение задачи в виде графа приближает к решению задачи, ведь появляется проблема представления графа в программе для исполнения на компьютере...
0
|
|
|
13 / 5 / 0
Регистрация: 15.11.2015
Сообщений: 57
|
|
| 20.11.2015, 15:48 | |
|
Простите, а чем плоха эта игра в качестве незатейливого и доступного для понимания примера? Здесь легко формулируется исходное и конечное состояния, понятны команды управления фишками... Конечно, не стану противиться использованию предложенного Вами примера и буду благодарен за комментарии :-)
Уже признался – в этой теме я полный профан... Добавлено через 29 минут Дополнение: "игра в восемь" мне показалась более интеллектуальной в сравнении, например, с задачкой жадного коммивояжера, мечущегося по городам! Есть различные варианты исходного состояния (пустой квадрат в середине, в углу, в средине стороны) – есть, что пообсуждать вплоть до существования решения.... Думаю, это интересно школьникам...
0
|
|
| 20.11.2015, 18:59 | ||
|
Хотите понять принцип? Открой сайт ACMP точка RU. Найдите задачку "Скачки". Сможете придумать решение без гугла, чтения обсуждений и прочего - поздравляю. Вы придумали dfs. (ну или научились его применять). Вы выбираете слишком сложную задачу, а в результате нет никакого весомого профита..
0
|
||
|
13 / 5 / 0
Регистрация: 15.11.2015
Сообщений: 57
|
|
| 20.11.2015, 19:57 | |
|
Спасибо, сайт открою!
Была догадка, что в большинстве случаев "теория графов" притягивается к решению реальных задач без достаточного основания. Ничего плохого не могу сказать про "теорию игр", хотя не очень понимаю, какие ее основополагающие принципы нужны для реализации поиска в глубину. Если не брать в ум построения графа, то все-равно "игра в восемь" будет считаться сложной? Какую задачку для детишек советуете?
0
|
|
| 21.11.2015, 00:43 | |||
Для тупого перебора - нет Вечерком.. Если не забуду(или не засну на клавиатуре) - отпишусь про игру. Добавлено через 4 часа 36 минут Прекрасная задача : тык Про 8: Ничего кроме перебора в голову не идёт. А в переборе будут циклы. А с ним разбираться совсем не хочется. Короче говоря запускать dfs от каждой занятой ячейки. Причём запускать на определенную длину. А там просто делать все возможные ходы (не больше четырёх вариантов на каждой глубине). Тольконудно будет здраво оценивать ценность каждого хода. А это проблематично. Можно конечно просто ждать пока не поставим ячейку в нужную позицию - но это долго и не всегда оптимально. Задачу Вы выбрали очень даже не простую. Посмотрите мою. Если Ваши школьники справятся - то есть огромный потенциал. Хотя по сути в задаче нет ничего сложного..
0
|
|||
| 21.11.2015, 09:23 | |||||||
0
|
|||||||
|
13 / 5 / 0
Регистрация: 15.11.2015
Сообщений: 57
|
|
| 21.11.2015, 10:55 | |
|
Уважаемый Ромаха,
очень прошу Вас, как более опытного участника форума, выполнить просьбу уважаемого супер-модератора и создать тему со ссылкой на эту интереснейшую тему! Заранее благодарю, Евгений. Добавлено через 51 минуту ...а потом подумал - Вы ведь ждете моего ответа!? Создал новую тему: FAQ Прикладное FAQ Прикладное там и мой ответ! Уважаемый модератор - мы стараемся... будьте снисходительны к несчастным...
0
|
|
|
0 / 0 / 0
Регистрация: 10.04.2020
Сообщений: 7
|
|
| 26.05.2020, 18:32 | |
|
Скажите пожалуйста, а как решаются задачи на размещение объектов? Например, надо разместить пожарную часть только в городе
0
|
|
|
7 / 7 / 2
Регистрация: 30.04.2012
Сообщений: 188
|
|
| 26.08.2022, 07:40 | |
|
Всем доброго здоровья и творческих успехов! Кто знает алгоритмы поиска независимого множества на произвольном графе? Граф - неориентированный и рёбра весов не имеют. Интересно узнать про алгоритмы разные, в том числе и на основе систем искусственного интеллекта.
0
|
|
|
1 / 0 / 1
Регистрация: 05.09.2018
Сообщений: 4
|
|
| 17.03.2023, 17:12 | |
|
Книга "Графомания"
Алгоритмы на произвольных графах реализованы на языке Delphi (Object Pascal). Все исходники в наличии. Скачивается бесплатно. Содержание: Знакомство с объектами, отношениями и множествами Представление объектов в языке Delphi Представление множеств, операции с множествами Понятие о сложности (трудоёмкости) алгоритмов Задачи на множествах: • разбиение множества на подмножества; • задача о наименьшем разбиении (ЗНР); • задача о наименьшем покрытии (ЗНП). Представление отношений графами Программная реализация графов, ввод и вывод графов Группа задач на достижимость: • взаимная достижимость вершин; • кратчайшие пути между вершинами; • выделение сильно связанных компонент. Группа задач на размещение: • независимые вершины и клики; • доминирующие множества; • раскраски; • центры; • p-центры; • p-медианы. Остовные деревья Группа задач о потоках: • максимальный поток в сети; • поток, ограниченный сверху и снизу; • минимальная стоимость потока. Паросочетания: • паросочетание в двудольном графе; • паросочетание в произвольном графе. Цикл Эйлера и задача почтальона: • на неориентированном графе; • на орграфе. Задачи Гамильтона и коммивояжёра: • разомкнутая задача Гамильтона; • замкнутая задача Гамильтона (контур); • комбинирование методов для задач Гамильтона; • замкнутая и разомкнутая задачи коммивояжёра.
0
|
|
| 17.03.2023, 17:12 | |
|
Помогаю со студенческими работами здесь
31
Задание по графам алгоритм по графам Задачка по графам задача по графам Задача по Графам Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
|
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца:
Хочу еще Симбу взять, очень нравится. . .
|
Инференс ML моделей в Java: TensorFlow, DL4J и DJL
Javaican 05.11.2025
Python захватил мир машинного обучения - это факт. Но когда дело доходит до продакшена, ситуация не так однозначна. Помню проект в крупном банке три года назад: команда data science натренировала. . .
|
Mapped types (отображённые типы) в TypeScript
Reangularity 03.11.2025
Mapped types работают как конвейер - берут существующую структуру и производят новую по заданным правилам. Меняют модификаторы свойств, трансформируют значения, фильтруют ключи. Один раз описал. . .
|
Адаптивная случайность в Unity: динамические вероятности для улучшения игрового дизайна
GameUnited 02.11.2025
Мой знакомый геймдизайнер потерял двадцать процентов активной аудитории за неделю. А виновником оказался обычный генератор псевдослучайных чисел. Казалось бы - добавил в карточную игру случайное. . .
|
|
Протоколы в Python
py-thonny 31.10.2025
Традиционная утиная типизация работает просто: попробовал вызвать метод, получилось - отлично, не получилось - упал с ошибкой в рантайме. Протоколы добавляют сюда проверку на этапе статического. . .
|
C++26: Read-copy-update (RCU)
bytestream 30.10.2025
Прошло почти двадцать лет с тех пор, как производители процессоров отказались от гонки мегагерц и перешли на многоядерность. И знаете что? Мы до сих пор спотыкаемся о те же грабли. Каждый раз, когда. . .
|
Изображения webp на старых x32 ОС Windows XP и Windows 7
Argus19 30.10.2025
Изображения webp на старых x32 ОС Windows XP и Windows 7
Чтобы решить задачу, использовал интернет:
поисковики Google и Yandex, а также подсказки Deep Seek.
Как оказалось, чтобы создать. . .
|
Passkey в ASP.NET Core identity
stackOverflow 29.10.2025
Пароли мертвы. Нет, серьезно - я повторяю это уже лет пять, но теперь впервые за это время чувствую, что это не просто красивые слова. В . NET 10 команда Microsoft внедрила поддержку Passkey прямо в. . .
|
Последние результаты исследования от команды MCM (октябрь 2025 г.)
Programma_Boinc 29.10.2025
Последние результаты исследования от команды MCM (октябрь 2025 г. )
Поскольку мы продолжаем изучать гены, которые играют ведущую роль в развитии рака, в рамках проекта "Картирование раковых. . .
|