|
4342 / 1474 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
FAQ по графам08.04.2010, 19:30. Показов 112611. Ответов 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
Задание по графам алгоритм по графам Задачка по графам задача по графам Задача по Графам Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|