new dgraph path predicate
This commit is contained in:
parent
bda5d56bdf
commit
a599699f0c
@ -12840,6 +12840,13 @@ vertices in @var{Vs} map to vertices in @var{NewVs}.
|
|||||||
The path @var{Path} is a path starting at vertex @var{Vertex} in graph
|
The path @var{Path} is a path starting at vertex @var{Vertex} in graph
|
||||||
@var{Graph}.
|
@var{Graph}.
|
||||||
|
|
||||||
|
@item dgraph_path(+@var{Vertex}, +@var{Vertex1}, +@var{Graph}, ?@var{Path})
|
||||||
|
@findex dgraph_path/3
|
||||||
|
@snindex dgraph_path/3
|
||||||
|
@cnindex dgraph_path/3
|
||||||
|
The path @var{Path} is a path starting at vertex @var{Vertex} in graph
|
||||||
|
@var{Graph} and ending at path @var{Vertex2}.
|
||||||
|
|
||||||
@item dgraph_reachable(+@var{Vertex}, +@var{Graph}, ?@var{Edges})
|
@item dgraph_reachable(+@var{Vertex}, +@var{Graph}, ?@var{Edges})
|
||||||
@findex dgraph_path/3
|
@findex dgraph_path/3
|
||||||
@snindex dgraph_path/3
|
@snindex dgraph_path/3
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
dgraph_min_paths/3,
|
dgraph_min_paths/3,
|
||||||
dgraph_isomorphic/4,
|
dgraph_isomorphic/4,
|
||||||
dgraph_path/3,
|
dgraph_path/3,
|
||||||
|
dgraph_path/4,
|
||||||
dgraph_leaves/2,
|
dgraph_leaves/2,
|
||||||
dgraph_reachable/3
|
dgraph_reachable/3
|
||||||
]).
|
]).
|
||||||
@ -40,7 +41,8 @@
|
|||||||
[rb_new/1 as dgraph_new]).
|
[rb_new/1 as dgraph_new]).
|
||||||
|
|
||||||
:- use_module(library(rbtrees),
|
:- use_module(library(rbtrees),
|
||||||
[rb_empty/1,
|
[rb_new/1,
|
||||||
|
rb_empty/1,
|
||||||
rb_lookup/3,
|
rb_lookup/3,
|
||||||
rb_apply/4,
|
rb_apply/4,
|
||||||
rb_insert/4,
|
rb_insert/4,
|
||||||
@ -361,10 +363,21 @@ dgraph_min_paths(V1, Graph, Paths) :-
|
|||||||
dgraph_to_wdgraph(Graph, WGraph),
|
dgraph_to_wdgraph(Graph, WGraph),
|
||||||
wdgraph_min_paths(V1, WGraph, Paths).
|
wdgraph_min_paths(V1, WGraph, Paths).
|
||||||
|
|
||||||
dgraph_path(V, G, [V|P]) :-
|
dgraph_path(V1, V2, Graph, Path) :-
|
||||||
rb_lookup(V, Children, G),
|
rb_new(E0),
|
||||||
ord_del_element(Children, V, Ch),
|
rb_lookup(V1, Children, Graph),
|
||||||
do_path(Ch, G, [V], P).
|
dgraph_path_children(Children, V2, E0, Graph, Path).
|
||||||
|
|
||||||
|
dgraph_path_children([V1|_], V2, _E1, _Graph, []) :- V1 == V2.
|
||||||
|
dgraph_path_children([V1|_], V2, E1, Graph, [V1|Path]) :-
|
||||||
|
V2 \== V1,
|
||||||
|
\+ rb_lookup(V1, _, E0),
|
||||||
|
rb_insert(E0, V2, [], E1),
|
||||||
|
rb_lookup(V1, Children, Graph),
|
||||||
|
dgraph_path_children(Children, V2, E1, Graph, Path).
|
||||||
|
dgraph_path_children([_|Children], V2, E1, Graph, Path) :-
|
||||||
|
dgraph_path_children(Children, V2, E1, Graph, Path).
|
||||||
|
|
||||||
|
|
||||||
do_path([], _, _, []).
|
do_path([], _, _, []).
|
||||||
do_path([C|Children], G, SoFar, Path) :-
|
do_path([C|Children], G, SoFar, Path) :-
|
||||||
@ -378,6 +391,11 @@ do_children([V|_], G, SoFar, [V|Path]) :-
|
|||||||
do_children([_|Children], G, SoFar, Path) :-
|
do_children([_|Children], G, SoFar, Path) :-
|
||||||
do_children(Children, G, SoFar, Path).
|
do_children(Children, G, SoFar, Path).
|
||||||
|
|
||||||
|
dgraph_path(V, G, [V|P]) :-
|
||||||
|
rb_lookup(V, Children, G),
|
||||||
|
ord_del_element(Children, V, Ch),
|
||||||
|
do_path(Ch, G, [V], P).
|
||||||
|
|
||||||
|
|
||||||
dgraph_isomorphic(Vs, Vs2, G1, G2) :-
|
dgraph_isomorphic(Vs, Vs2, G1, G2) :-
|
||||||
rb_new(Map0),
|
rb_new(Map0),
|
||||||
|
Reference in New Issue
Block a user