1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| kosyak |
30.10.2008 12:13
Сообщение
#1
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: 0 |
Доброго всем времени суток. Помогите разобраться с задачей: "определение цикла Гамильтона в заданном графе". Язык prolog. Какой может быть алгоритм, где можно об этом попонятней почитать? Может есть уже готовая))) На pascalе бы быстро все сделал, а вот с логическим программированием пока проблемы.
Заранее огромное спасибо. |
![]() ![]() |
| kosyak |
3.11.2008 19:00
Сообщение
#2
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: 0 |
Так он правильно выводит... нет никакого цикла... я просто сделал для ориентированного графа. надо rebro(1,2) и rebro(2,1) - не одно и тоже.
Вот исправленная программа, вроде все работает, как мне кажется(тоже с ориентированными): Код domains top=symbol Vlist=top* rebro=rebro(top,top) Rlist=rebro* gr=graf(Vlist,Rlist) predicates /*put' ot odnoy vershini do drugoy*/ path(top,top,Vlist,Vlist,gr) /*prinadlezhit li vershina spisku vershin*/ memberV(top,Vlist) /*prinadlezhit li rebro spisku reber*/ memberR(rebro,Rlist) /*gamiltonov cikl*/ gamil(gr,Vlist) /*vse li vershini proydeni*/ allV(Vlist,Vlist) clauses gamil(G,P):- G=graf(Vlist,Rlist), P=[A|V], path(A,B,[A],V,G), memberR(rebro(B,A),Rlist), allV(Vlist,V). path(A,B,V,[B|V],graf(Vlist,Rlist)):- memberR(rebro(A,B),Rlist), not(memberV(B,V)). path(A,B,V,V2,graf(Vlist,Rlist)):- memberR(rebro(A,N),Rlist), not(memberV(N,V)), V1=[N|V], path(N,B,V1,V2,graf(Vlist,Rlist)). allV([],L). allV([X|T],L):- memberV(X,L), allV(T,L). memberV(A, [A|_]). memberV(A, [_|L]):-memberV(A,L). memberR(A, [A|_]). memberR(A, [_|L]):-memberR(A,L). |
| -Алексей- |
27.12.2012 16:17
Сообщение
#3
|
|
Гость |
Так он правильно выводит... нет никакого цикла... я просто сделал для ориентированного графа. надо rebro(1,2) и rebro(2,1) - не одно и тоже. Вот исправленная программа, вроде все работает, как мне кажется(тоже с ориентированными): Код domains top=symbol Vlist=top* rebro=rebro(top,top) Rlist=rebro* gr=graf(Vlist,Rlist) predicates /*put' ot odnoy vershini do drugoy*/ path(top,top,Vlist,Vlist,gr) /*prinadlezhit li vershina spisku vershin*/ memberV(top,Vlist) /*prinadlezhit li rebro spisku reber*/ memberR(rebro,Rlist) /*gamiltonov cikl*/ gamil(gr,Vlist) /*vse li vershini proydeni*/ allV(Vlist,Vlist) clauses gamil(G,P):- G=graf(Vlist,Rlist), P=[A|V], path(A,B,[A],V,G), memberR(rebro(B,A),Rlist), allV(Vlist,V). path(A,B,V,[B|V],graf(Vlist,Rlist)):- memberR(rebro(A,B),Rlist), not(memberV(B,V)). path(A,B,V,V2,graf(Vlist,Rlist)):- memberR(rebro(A,N),Rlist), not(memberV(N,V)), V1=[N|V], path(N,B,V1,V2,graf(Vlist,Rlist)). allV([],L). allV([X|T],L):- memberV(X,L), allV(T,L). memberV(A, [A|_]). memberV(A, [_|L]):-memberV(A,L). memberR(A, [A|_]). memberR(A, [_|L]):-memberR(A,L). а никак нельзя код под SWI посмотреть? оч нужно |
kosyak Гамильтонов цикл на Prolog 30.10.2008 12:13
volvo Начать можно отсюда: http://isr.by.ru/prolog/ch9_5... 30.10.2008 12:25
kosyak
Начать можно отсюда: http://isr.by.ru/prolog/ch9_... 30.10.2008 14:37
kosyak Что-то у меня не особо получается... не могу понят... 2.11.2008 13:38
kosyak Вот описал часть программы:
domains
VMas=integ... 2.11.2008 14:51
volvo Хм... Что ты тут натворил?
Смотри, что ты делаешь... 2.11.2008 18:25
kosyak Спасибо большое... пойду дальше разбираться... 3.11.2008 11:35
kosyak Вот написал полную программу.... но не работает ((... 3.11.2008 13:57
kosyak Все, вроде сделал:
domains
top=symbol
Vlist=... 3.11.2008 17:22
volvo Вот именно... Тебе выводит несколько раз одно и то... 3.11.2008 18:16![]() ![]() |
|
Текстовая версия | 8.12.2025 8:08 |