![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
kosyak |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
Доброго всем времени суток. Помогите разобраться с задачей: "определение цикла Гамильтона в заданном графе". Язык prolog. Какой может быть алгоритм, где можно об этом попонятней почитать? Может есть уже готовая))) На pascalе бы быстро все сделал, а вот с логическим программированием пока проблемы.
Заранее огромное спасибо. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Хм... Что ты тут натворил?
Смотри, что ты делаешь: 1) описываешь предикат prinad(R, RMas), то есть проверка на существование ребра в графе 2) и тут же: Код path1(A,[Y|P1],VM,RM,P):- - вызываешь его как prinad(integer, integer*) ? Нельзя... Сделай отдельно проверку существования вершины в списке...smezh(X,Y,VM,RM), prinad(X,P1), path1(A,[X,Y|P1],VM,RM,P). В общем, вот это: Код domains должно нормально компилироваться (Пролога у меня сейчас нет, проверить негде, но вроде бы ошибок не видно)VMas=integer* R=rebro(integer,integer) RMas=R* predicates inlist(integer, VMas) path(integer,integer,VMas,RMas,VMas) path1(integer,VMas,VMas,RMas,VMas) smezh(integer,integer,VMas,RMas) prinad(R, RMas) clauses % проверка вхождения ребра в список ребер prinad(X, [X|_]). prinad(X, [_|L]):-prinad(X, L). % проверка вхождения номера вершины (integer) в список целых inlist(X, [X|_]). inlist(X, [_|L]):-inlist(X, L). path(A,Z,VM,RM,P):- path1(A,[Z],VM,RM,P). path1(A,[A|P1],_,_,[A|P1]). path1(A,[Y|P1],VM,RM,P):- smezh(X,Y,VM,RM), inlist(X,P1), path1(A,[X,Y|P1],VM,RM,P). smezh(X,Y,VM,RM):- prinad(rebro(X,Y),RM); prinad(rebro(Y,X),RM). |
![]() ![]() |
![]() |
Текстовая версия | 8.08.2025 3:56 |