improve JT
fix graph compatibility with SICStus re-export declaration. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2037 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
@@ -8,7 +8,6 @@
|
||||
undgraph_new/1,
|
||||
undgraph_add_edge/4,
|
||||
undgraph_add_edges/3,
|
||||
undgraph_add_vertex/3,
|
||||
undgraph_add_vertices/3,
|
||||
undgraph_del_edge/4,
|
||||
undgraph_del_edges/3,
|
||||
@@ -16,31 +15,35 @@
|
||||
undgraph_del_vertices/3,
|
||||
undgraph_edge/3,
|
||||
undgraph_edges/2,
|
||||
undgraph_vertices/2,
|
||||
undgraph_neighbors/3,
|
||||
undgraph_neighbours/3,
|
||||
undgraph_complement/2,
|
||||
dgraph_to_undgraph/2,
|
||||
undgraph_min_tree/2]).
|
||||
|
||||
:- reexport( library(dgraphs),
|
||||
[
|
||||
dgraph_new/1 as undgraph_new,
|
||||
dgraph_add_vertex/3 as undgraph_add_vertex,
|
||||
dgraph_vertices/2 as undgraph_vertices,
|
||||
dgraph_complement/2 as undgraph_complement,
|
||||
dgraph_symmetric_closure/2 as dgraph_to_undgraph,
|
||||
dgraph_edge/3 as undgraph_edge
|
||||
]).
|
||||
|
||||
|
||||
:- use_module( library(dgraphs),
|
||||
[
|
||||
dgraph_new/1,
|
||||
dgraph_add_edge/4,
|
||||
dgraph_add_edges/3,
|
||||
dgraph_add_vertex/3,
|
||||
dgraph_add_vertices/3,
|
||||
dgraph_del_edge/4,
|
||||
dgraph_del_edges/3,
|
||||
dgraph_del_vertex/3,
|
||||
dgraph_del_vertices/3,
|
||||
dgraph_edge/3,
|
||||
dgraph_edges/2,
|
||||
dgraph_vertices/2,
|
||||
dgraph_neighbors/3,
|
||||
dgraph_neighbours/3,
|
||||
dgraph_complement/2,
|
||||
dgraph_symmetric_closure/2]).
|
||||
dgraph_neighbours/3]).
|
||||
|
||||
:- use_module(library(wundgraphs), [
|
||||
undgraph_to_wundgraph/2,
|
||||
@@ -58,28 +61,22 @@
|
||||
rb_partial_map/4
|
||||
]).
|
||||
|
||||
undgraph_new(Vertices) :-
|
||||
dgraph_new(Vertices).
|
||||
|
||||
undgraph_add_edge(V1,V2,Vs0,Vs2) :-
|
||||
undgraph_add_edge(Vs0,V1,V2,Vs2) :-
|
||||
dgraphs:dgraph_new_edge(V1,V2,Vs0,Vs1),
|
||||
dgraphs:dgraph_new_edge(V2,V1,Vs1,Vs2).
|
||||
|
||||
undgraph_add_edges(Edges) -->
|
||||
{ dup_edges(Edges, DupEdges) },
|
||||
dgraph_add_edges(DupEdges).
|
||||
undgraph_add_edges(G0, Edges, GF) :-
|
||||
dup_edges(Edges, DupEdges),
|
||||
dgraph_add_edges(G0, DupEdges, GF).
|
||||
|
||||
dup_edges([],[]).
|
||||
dup_edges([E1-E2|Edges], [E1-E2,E2-E1|DupEdges]) :-
|
||||
dup_edges(Edges, DupEdges).
|
||||
|
||||
undgraph_add_vertices([]) --> [].
|
||||
undgraph_add_vertices([V|Vs]) -->
|
||||
dgraph_add_vertex(V),
|
||||
undgraph_add_vertices(Vs).
|
||||
|
||||
undgraph_add_vertex(V) -->
|
||||
dgraph_add_vertex(V).
|
||||
undgraph_add_vertices(G, [], G).
|
||||
undgraph_add_vertices(G0, [V|Vs], GF) :-
|
||||
dgraph_add_vertex(G0, V, GI),
|
||||
undgraph_add_vertices(GI, Vs, GF).
|
||||
|
||||
undgraph_edges(Vs,Edges) :-
|
||||
dgraph_edges(Vs,DupEdges),
|
||||
@@ -92,9 +89,6 @@ remove_dups([V1-V2|DupEdges],NEdges) :- V1 @< V2, !,
|
||||
remove_dups([_|DupEdges],Edges) :-
|
||||
remove_dups(DupEdges,Edges).
|
||||
|
||||
undgraph_vertices(Vs,Vertices) :-
|
||||
dgraph_vertices(Vs,Vertices).
|
||||
|
||||
undgraph_neighbours(V,Vertices,Children) :-
|
||||
dgraph_neighbours(V,Vertices,Children0),
|
||||
(
|
||||
@@ -114,20 +108,15 @@ undgraph_neighbors(V,Vertices,Children) :-
|
||||
Children = Children0
|
||||
).
|
||||
|
||||
undgraph_complement(Vs0,VsF) :-
|
||||
dgraph_complement(Vs0,VsF).
|
||||
undgraph_del_edge(Vs0,V1,V2,VsF) :-
|
||||
dgraph_del_edge(Vs0,V1,V2,Vs1),
|
||||
dgraph_del_edge(Vs1,V2,V1,VsF).
|
||||
|
||||
undgraph_del_edge(V1,V2,Vs0,VsF) :-
|
||||
dgraph_del_edge(V1,V2,Vs0,Vs1),
|
||||
dgraph_del_edge(V2,V1,Vs1,VsF).
|
||||
undgraph_del_edges(G0, Edges, GF) :-
|
||||
dup_edges(Edges,DupEdges),
|
||||
dgraph_del_edges(G0, DupEdges, GF).
|
||||
|
||||
undgraph_del_edges(Edges) -->
|
||||
{
|
||||
dup_edges(Edges,DupEdges)
|
||||
},
|
||||
dgraph_del_edges(DupEdges).
|
||||
|
||||
undgraph_del_vertex(V, Vs0, Vsf) :-
|
||||
undgraph_del_vertex(Vs0, V, Vsf) :-
|
||||
rb_delete(Vs0, V, BackEdges, Vsi),
|
||||
(
|
||||
ord_del_element(BackEdges,V,RealBackEdges)
|
||||
@@ -138,11 +127,11 @@ undgraph_del_vertex(V, Vs0, Vsf) :-
|
||||
),
|
||||
rb_partial_map(Vsi, RealBackEdges, del_edge(V), Vsf).
|
||||
|
||||
undgraph_del_vertices(Vs) -->
|
||||
{ sort(Vs,SortedVs) },
|
||||
delete_all(SortedVs, [], BackEdges),
|
||||
{ ord_subtract(BackEdges, SortedVs, TrueBackEdges) },
|
||||
delete_remaining_edges(SortedVs, TrueBackEdges).
|
||||
undgraph_del_vertices(G0, Vs, GF) :-
|
||||
sort(Vs,SortedVs),
|
||||
delete_all(SortedVs, [], BackEdges, G0, GI),
|
||||
ord_subtract(BackEdges, SortedVs, TrueBackEdges),
|
||||
delete_remaining_edges(SortedVs, TrueBackEdges, GI, GF).
|
||||
|
||||
% it would be nice to be able to delete a set of elements from an RB tree
|
||||
% but I don't how to do it yet.
|
||||
@@ -161,13 +150,6 @@ del_edges(ToRemove,E0,E) :-
|
||||
del_edge(ToRemove,E0,E) :-
|
||||
ord_del_element(E0,ToRemove,E).
|
||||
|
||||
dgraph_to_undgraph(G, U) :-
|
||||
dgraph_symmetric_closure(G, U).
|
||||
|
||||
undgraph_edge(N1, N2, G) :-
|
||||
dgraph_edge(N1, N2, G).
|
||||
|
||||
|
||||
undgraph_min_tree(G, T) :-
|
||||
undgraph_to_wundgraph(G, WG),
|
||||
wundgraph_min_tree(WG, WT, _),
|
||||
|
Reference in New Issue
Block a user