IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задачка про Гамильтонов граф(((, очень нужна помощь!!!!!плз!!!!
ОтчаявшийсяПрогер
сообщение 6.12.2007 17:01
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Саня

Репутация: -  0  +


Люди добрые и многознающие!!! Помогите пжлсты решить задачку про гамильтонов граф....курсовая моя...

Вот текст задачки____:
Гамильтоновым называется граф,в котором существует простой цикл,содержащий все вершины графа(но необязательно все ребра). Разработать алгоритм и написать программу, позволяющую определять - является ли задаваемый граф Гамильтоновым или нет.

ПЖЛУСТО ПОМОГИТЕ МНЕ Я В ШКОЛЕ ГРАФЫ НЕ ПРОХОДИЛ И ВПЕРВЫЕ О НИХ УСЛЫШАЛ....
На форумах тему по Гамильтонов граф небыло...вот и написал

Помогите решить курсовую....я вообще уже поник mega_chok.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
Michael_Rybak
сообщение 6.12.2007 17:36
Сообщение #2


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Задача решается полным перебором. В инете инфы просто туча. Ищи.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ОтчаявшийсяПрогер
сообщение 6.12.2007 17:40
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Саня

Репутация: -  0  +


Я уже всё обыскал...ничё ненайду(((
Уже крыша от этого инэта и Паскаля едет blink.gif
Я просто непонимаю как сделать рандомно пути и по ним ходить....вообще немогу придумать процедуру как определить программно есть путь между вершинами графа или нет ??
да и вообще немогу граф построить ((

Сообщение отредактировано: ОтчаявшийсяПрогер - 6.12.2007 17:42
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ОтчаявшийсяПрогер
сообщение 6.12.2007 18:01
Сообщение #4





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Саня

Репутация: -  0  +


Или хотяб подкиньте прогу по созданию графа...
Я уж процедуры до думаю...
помоему это будет рекурсивная процедура...по проверке на наличие Гамильтонова графа..

Сообщение отредактировано: ОтчаявшийсяПрогер - 6.12.2007 18:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 6.12.2007 18:36
Сообщение #5


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


"Прога по созданию графов" - в FAQ.

Алгоритм - *вторая ссылка в гугле* по запросу "гамильтонов цикл".
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ОтчаявшийсяПрогер
сообщение 6.12.2007 20:48
Сообщение #6





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Саня

Репутация: -  0  +


СПС за инфу...но я FAQ просмотрел и нашел только алгоритмы над графами(Гамильтонового небыло)
А по ссылке Гугля....разберусь как нибудь
Я немогу понять как написать процедуру случайного расставления рёбер меж. вершинами(чтоб некоторые верш. соединяла,а некоторые нет)...
или все вершины у графа соединены между собой???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 6.12.2007 21:20
Сообщение #7


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


представляешь граф матрицей смежности. проходишь по ней циклом и ставишь рандомно нули и единички.

если граф неориентированный, после этого делаешь матрицу симметричной.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ОтчаявшийсяПрогер
сообщение 7.12.2007 11:25
Сообщение #8





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Саня

Репутация: -  0  +


Всё...теперь понятно что представляет собой граф в Паскале yes2.gif

Подскажи тогда сначала рандомно вводишь, после этого симметричной делаешь?
К примеру ввел все элементы
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
Вот так???

А так спасибо большое..терь я хоть чёто понял))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 7.12.2007 14:34
Сообщение #9


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


чтобы сделать симметричной - копируешь инфу из верхней треугольной части в нижнюю (например):

for i := 1 to n do
for j := 1 to i - 1 do
a[i, j] := a[j, i];


т.е. да, ты правильно пример привел.

а можно и сразу генерить симметричную:

for i := 1 to n do
for j := 1 to i - 1 do begin
a[j, i] := random(2);
a[i, j] := a[j, i];
end

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ОтчаявшийсяПрогер
сообщение 8.12.2007 10:30
Сообщение #10





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Саня

Репутация: -  0  +


Понятно..
Я в принципе так и сделал ...
Осталась процедура на проверку наличия Гамильтонова цикла..
А по ссылке которую ты кинул я ходил, ток ничё не понял)) и сейчас она неактивна в добавок...
Там надо сделать рекурсию в процедуре или без неё обойтись можно??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 8.12.2007 12:29
Сообщение #11


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Неактивную ссылку можно почитать в кеше у гугла.

Лучше с рекурсией.

Ладно, давай расскажу на пальцах.

Схема такая: заводишь масив булевых значений visited[]. Заполняешь fals'ами. В рекурсию принимаешь текущую точку и делаешь следующее: помечаешь ее как посещенную, и идешь циклом по всем достижимым из нее не посещенным. Для каждой запускаешь рекурсию. После этого цикла снимаешь флаг visited текущей точки.

Еще подумай, где и как здесь добавить проверку на то, что решение найдено.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"