Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2019, 20:19   #1
dimitruf
 
Регистрация: 14.02.2016
Сообщений: 9
По умолчанию Отношение достижимости на графе в Visual Prolog

Есть код для нахождения отношения достижимоcти на графе. Задача: найти вершины, не достижимые из заданной вершины. Нужны предложения в виде программного кода.
Код:
% Copyright
 
implement main
    open core, console, list
 
class facts - graph
    arc : (string, string, unsigned).
 
class facts
    conn : string* := [].
 
class predicates
    connected : (string) -> string multi.
    connected1 : (string) -> string multi.
    edge : (string, string [out], unsigned [out]) nondeterm.
    components : () -> string**.
    components : (string*) -> string**.
 
clauses
    edge(X, Y, Dist) :-
        arc(X, Y, Dist)
        or
        arc(Y, X, Dist).
 
    connected(X) = connected1(X) :-
        conn := [X].
 
    connected1(X) = X.
    connected1(X) = connected1(Y) :-
        edge(X, Y, _),
        not(isMember(Y, conn)),
        conn := [Y | conn].
 
    components() = components(VList) :-
        VList =
            removeDuplicates(
                [ V ||
                    arc(V, _, _)
                    or
                    arc(_, V, _)
                ]).
 
    components([V | L]) = [Cmp | components(difference(L, Cmp))] :-
        Cmp = [ Vertex || Vertex = connected(V) ].
    components([]) = [].
 
clauses
    run() :-
        CP = commandLineParser::new(),
        CP:acceptEmpty := true,
        CP:addOption_help("-help"),
        % define command line options here
        if ErrorMessage = isSome(CP:parse()) then
            stdio::write(ErrorMessage)
        else
            % place your own code here
            file::consult("graph1.txt", graph),
            write(connected("Самара")),
            nl,
            fail
            or
            write("\nВершины компонент связности:\n"),
            forAll(components(),
                { (L) :-
                    write(L),
                    nl
                }),
            _ = readLine()
        end if.
 
end implement main
 
goal
    console::run(main::run).
Проект:proj6.rar
Файл с путями:graph1.txt

Последний раз редактировалось dimitruf; 21.11.2019 в 20:57.
dimitruf вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в ориентированном графе на Visual Prolog 7.5 Panchess Помощь студентам 1 20.09.2019 16:39
SWI prolog и Visual prolog поиск маршрута Екатерина 123 Помощь студентам 0 27.08.2015 19:42
Visual Prolog anechka_13 Помощь студентам 0 21.12.2011 19:50
В графе найти все его четырехвершинные полные подграфы[PROLOG] Bruster Помощь студентам 1 24.12.2009 09:55