1
1
using LightGraphs
2
- import LightGraphs. rem_edge!
3
-
4
- Base. start (e:: LightGraphs.SimpleGraphs.SimpleEdge ) = 1
5
- Base. next (e:: LightGraphs.SimpleGraphs.SimpleEdge , state) = state == 1 ? (src (e), 2 ) : (dst (e), 3 )
6
- Base. done (e:: LightGraphs.SimpleGraphs.SimpleEdge , state) = state == 3
7
2
8
3
"""
9
4
insorted(a, x)
@@ -57,7 +52,7 @@ where higher nodes have smaller vertex number.
57
52
function unshielded (g, S)
58
53
Z = Tuple{Int64,Int64,Int64}[]
59
54
for e in edges (g)
60
- v, w = ( src (e), dst (e) )
55
+ v, w = Tuple (e )
61
56
assert (v < w)
62
57
for z in neighbors (g, w) # case `∨` or `╎`
63
58
z <= v && continue # longer arm of `∨` is visited first
@@ -73,11 +68,11 @@ function unshielded(g, S)
73
68
Z
74
69
end
75
70
76
- adjacent (dg:: DiGraph , v, w) = has_edge (dg, ( v, w)) || has_edge (dg, ( w, v) )
77
- has_both (dg:: DiGraph , v, w) = has_edge (dg, ( v, w)) && has_edge (dg, ( w, v) )
71
+ isadjacent (dg:: DiGraph , v, w) = has_edge (dg, v, w) || has_edge (dg, w, v)
72
+ has_both (dg:: DiGraph , v, w) = has_edge (dg, v, w) && has_edge (dg, w, v)
78
73
79
- rem_edge ! (dg:: DiGraph , e:: Pair ) = rem_edge! (dg, Edge (e))
80
- rem_edge ! (dg:: Graph , e:: Tuple ) = rem_edge! (dg, Edge (e))
74
+ remove ! (dg:: DiGraph , e:: Pair ) = rem_edge! (dg, Edge (e))
75
+ remove ! (dg:: Graph , e:: Tuple ) = rem_edge! (dg, Edge (e))
81
76
82
77
"""
83
78
vskel(g)
@@ -96,12 +91,12 @@ function _vskel(n::V, I, par...) where {V}
96
91
97
92
for (u, v, w) in Z
98
93
if has_edge (g, (u, v))
99
- rem_edge ! (dg, v => u)
100
- rem_edge ! (g, (v, u))
94
+ remove ! (dg, v => u)
95
+ remove ! (g, (v, u))
101
96
end
102
97
if has_edge (g, (v, w))
103
- rem_edge ! (dg, v => w)
104
- rem_edge ! (g, (v, w))
98
+ remove ! (dg, v => w)
99
+ remove ! (g, (v, w))
105
100
end
106
101
end
107
102
dg
@@ -128,27 +123,28 @@ function pcalg(n::V, I, par...) where {V}
128
123
129
124
for (u, v, w) in Z
130
125
if has_edge (g, (u, v))
131
- rem_edge ! (dg, v => u)
132
- rem_edge ! (g, (v, u))
126
+ remove ! (dg, v => u)
127
+ remove ! (g, (v, u))
133
128
end
134
129
if has_edge (g, (v, w))
135
- rem_edge ! (dg, v => w)
136
- rem_edge ! (g, (v, w))
130
+ remove ! (dg, v => w)
131
+ remove ! (g, (v, w))
137
132
end
138
133
end
139
134
140
135
# Step 3: Apply Rule 1-3 consecutively
141
136
removed = Tuple{Int64,Int64}[]
142
137
while true
143
138
for e in edges (g)
144
- for (v, w) in (e, reverse (e))
139
+ for e_ in (e, reverse (e))
140
+ v, w = Tuple (e_)
145
141
# Rule 1: Orient v-w into v->w whenever there is u->v
146
142
# such that u and w are not adjacent
147
143
for u in in_neighbors (dg, v)
148
144
has_edge (dg, v => u) && continue # not directed
149
- adjacent (dg, u, w) && continue
145
+ isadjacent (dg, u, w) && continue
150
146
VERBOSE && println (" rule 1: " , v => w)
151
- rem_edge ! (dg, w => v)
147
+ remove ! (dg, w => v)
152
148
push! (removed, (w, v))
153
149
@goto ende
154
150
end
@@ -167,7 +163,7 @@ function pcalg(n::V, I, par...) where {V}
167
163
168
164
if ! disjoint_sorted (ins, outs)
169
165
VERBOSE && println (" rule 2: " , v => w)
170
- rem_edge ! (dg, w => v)
166
+ remove ! (dg, w => v)
171
167
push! (removed, (w, v))
172
168
@goto ende
173
169
end
@@ -179,7 +175,7 @@ function pcalg(n::V, I, par...) where {V}
179
175
has_edge (dg, k => v) && push! (fulls, k)
180
176
end
181
177
for (k, l) in combinations (fulls, 2 ) # FIXME :
182
- adjacent (dg, k, l) && continue
178
+ isadjacent (dg, k, l) && continue
183
179
184
180
# Skip if not k->w or if not l->w
185
181
if has_edge (dg, w => k) || ! has_edge (dg, k => w)
@@ -189,7 +185,7 @@ function pcalg(n::V, I, par...) where {V}
189
185
continue
190
186
end
191
187
VERBOSE && println (" rule 3: " , v => w)
192
- rem_edge ! (dg, w => v)
188
+ remove ! (dg, w => v)
193
189
push! (removed, (w, v))
194
190
@goto ende
195
191
end
@@ -198,7 +194,7 @@ function pcalg(n::V, I, par...) where {V}
198
194
199
195
@label ende
200
196
for e in removed
201
- rem_edge ! (g, e)
197
+ remove ! (g, e)
202
198
end
203
199
isempty (removed) && break
204
200
empty! (removed)
0 commit comments