Счетчик пролога и эулерпат - PullRequest
0 голосов
/ 13 июня 2011

На этой неделе я выполнил эту домашнюю работу: посчитал оценку узлов в неориентированном графе и проверил, есть ли в нем путь Эйлера.функция должна работать следующим образом:

gradliste([[a,b],[b,c],[b,g],[c,d],[d,e],[e,f],[f,g],[g,h],[c,f]],X).
X = [[a, 1], [b, 3], [c, 3], [g, 3], [d, 2], [e, 2], [f, 3], [h, 1]]

testEulerweg([[a,b],[b,c],[c,d],[d,e],[a,e],[b,d],[b,e],[a,d]]).
true.

Моя первая идея функции gradliste состоит в том, чтобы «объединить» график и сгенерировать список, подобный этому: [a,b,b,c,b,g,c,d,d,e,e,f,f,g,g,h,c,f], тогда я подсчитываю числа каждого узла.к сожалению, я остановился на merge.

и для второй функции testEulerweg Я думаю, что сначала я должен написать функцию allconnected, работающую следующим образом:

allconnected([[a,b],[b,c],[c,d]]).
true.

allconnected([[a,b],[b,c],[e,f]]).
False.

, затем я могупроверьте, нет ли ни одного или двух узлов с нечетным номером оценки, используя функцию gradliste.

Может кто-нибудь помочь мне с моей идеей?Я также открыт для новых идей:)

заранее спасибо

bearzk

1 Ответ

0 голосов
/ 13 июня 2011

Функция merge проста.Я переименую его flatten:

flatten([[X,Y] | Edges], [X,Y|Rest]) :-
    flatten(Edges, Rest).

И я позволю вам написать базовый случай.

Что касается поиска пути Эйлера, ознакомьтесь с алгоритмами на Wikipedia .Второй может быть легко реализован в терминах select/3, если вы не flatten список первый:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...