Задачка про Гамильтонов граф(((, очень нужна помощь!!!!!плз!!!! |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задачка про Гамильтонов граф(((, очень нужна помощь!!!!!плз!!!! |
ОтчаявшийсяПрогер |
Сообщение
#1
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Саня Репутация: 0 |
Люди добрые и многознающие!!! Помогите пжлсты решить задачку про гамильтонов граф....курсовая моя...
Вот текст задачки____: Гамильтоновым называется граф,в котором существует простой цикл,содержащий все вершины графа(но необязательно все ребра). Разработать алгоритм и написать программу, позволяющую определять - является ли задаваемый граф Гамильтоновым или нет. ПЖЛУСТО ПОМОГИТЕ МНЕ Я В ШКОЛЕ ГРАФЫ НЕ ПРОХОДИЛ И ВПЕРВЫЕ О НИХ УСЛЫШАЛ.... На форумах тему по Гамильтонов граф небыло...вот и написал Помогите решить курсовую....я вообще уже поник |
Michael_Rybak |
Сообщение
#2
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Задача решается полным перебором. В инете инфы просто туча. Ищи.
|
ОтчаявшийсяПрогер |
Сообщение
#3
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Саня Репутация: 0 |
Я уже всё обыскал...ничё ненайду(((
Уже крыша от этого инэта и Паскаля едет Я просто непонимаю как сделать рандомно пути и по ним ходить....вообще немогу придумать процедуру как определить программно есть путь между вершинами графа или нет ?? да и вообще немогу граф построить (( Сообщение отредактировано: ОтчаявшийсяПрогер - |
ОтчаявшийсяПрогер |
Сообщение
#4
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Саня Репутация: 0 |
Или хотяб подкиньте прогу по созданию графа...
Я уж процедуры до думаю... помоему это будет рекурсивная процедура...по проверке на наличие Гамильтонова графа.. Сообщение отредактировано: ОтчаявшийсяПрогер - |
Michael_Rybak |
Сообщение
#5
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
"Прога по созданию графов" - в FAQ.
Алгоритм - *вторая ссылка в гугле* по запросу "гамильтонов цикл". |
ОтчаявшийсяПрогер |
Сообщение
#6
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Саня Репутация: 0 |
СПС за инфу...но я FAQ просмотрел и нашел только алгоритмы над графами(Гамильтонового небыло)
А по ссылке Гугля....разберусь как нибудь Я немогу понять как написать процедуру случайного расставления рёбер меж. вершинами(чтоб некоторые верш. соединяла,а некоторые нет)... или все вершины у графа соединены между собой??? |
Michael_Rybak |
Сообщение
#7
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
представляешь граф матрицей смежности. проходишь по ней циклом и ставишь рандомно нули и единички.
если граф неориентированный, после этого делаешь матрицу симметричной. |
ОтчаявшийсяПрогер |
Сообщение
#8
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Саня Репутация: 0 |
Всё...теперь понятно что представляет собой граф в Паскале
Подскажи тогда сначала рандомно вводишь, после этого симметричной делаешь? К примеру ввел все элементы 0 1 0 1 0 0 1 1 1 0 0 1 1 1 1 0 и делаешь симметрию относительно главной диагонали...а сама глал. диагональ состоит из 0.. 0 1 0 1 1 0 1 1 0 1 0 1 1 1 1 0 Вот так??? А так спасибо большое..терь я хоть чёто понял)) |
Michael_Rybak |
Сообщение
#9
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
чтобы сделать симметричной - копируешь инфу из верхней треугольной части в нижнюю (например):
for i := 1 to n do т.е. да, ты правильно пример привел. а можно и сразу генерить симметричную: for i := 1 to n do |
ОтчаявшийсяПрогер |
Сообщение
#10
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Саня Репутация: 0 |
Понятно..
Я в принципе так и сделал ... Осталась процедура на проверку наличия Гамильтонова цикла.. А по ссылке которую ты кинул я ходил, ток ничё не понял)) и сейчас она неактивна в добавок... Там надо сделать рекурсию в процедуре или без неё обойтись можно?? |
Michael_Rybak |
Сообщение
#11
|
Michael_Rybak Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Неактивную ссылку можно почитать в кеше у гугла.
Лучше с рекурсией. Ладно, давай расскажу на пальцах. Схема такая: заводишь масив булевых значений visited[]. Заполняешь fals'ами. В рекурсию принимаешь текущую точку и делаешь следующее: помечаешь ее как посещенную, и идешь циклом по всем достижимым из нее не посещенным. Для каждой запускаешь рекурсию. После этого цикла снимаешь флаг visited текущей точки. Еще подумай, где и как здесь добавить проверку на то, что решение найдено. |
Текстовая версия | 29.03.2024 5:16 |