@@ -2,72 +2,77 @@ function color_graph(g::LightGraphs.AbstractGraph, ::AcyclicColoring)
2
2
color = zeros (Int, nv (g))
3
3
set = DisjointSets {Int} ([])
4
4
5
- first_visit_to_tree = Array {Tuple{Int, Int}, 1} (undef, ne (g))
6
- first_neighbor = Array {Tuple{Int, Int}, 1} (undef, ne (g))
5
+ first_visit_to_tree = Array {Tuple{Int, Int}, 1} ()
6
+ first_neighbor = Array {Tuple{Int, Int}, 1} ()
7
+
8
+ init_array! (first_visit_to_tree, ne (g))
9
+ init_array! (first_neighbor, ne (g))
10
+
11
+
7
12
8
13
forbidden_colors = zeros (Int, nv (g))
9
14
10
15
for v in vertices (g)
11
- println (" >>>\n OUTER LOOP" )
12
- println (" >>> v = $v " )
13
- println (" >>> first block" )
16
+ # println(">>>\nOUTER LOOP")
17
+ # println(">>> v = $v")
18
+ # println(">>> first block")
14
19
for w in outneighbors (g, v)
15
- println (" >>> w = $w " )
20
+ # println(">>> w = $w")
16
21
if color[w]!= 0
17
- wc = color[w]
18
- println (" >>> $w has nonzero color = $wc " )
19
- println (" >>> setting forbidden color[$wc ] = $v " )
22
+ # wc = color[w]
23
+ # println(">>> $w has nonzero color = $wc")
24
+ # println(">>> setting forbidden color[$wc] = $v")
20
25
forbidden_colors[color[w]] = v
21
26
end
22
27
end
23
28
24
- println (" >>> second block" )
29
+ # println(">>> second block")
25
30
for w in outneighbors (g, v)
26
- println (" >>> w = $w " )
31
+ # println(">>> w = $w")
27
32
if color[w]!= 0
28
- wc = color[w]
29
- println (" >>> $w has nonzero color = $wc " )
33
+ # wc = color[w]
34
+ # println(">>> $w has nonzero color = $wc")
30
35
for x in outneighbors (g, w)
31
- println (" >>> x = $x " )
32
- wx = color[x]
33
- println (" >>> $x has color = $wx " )
36
+ # println(">>> x = $x")
37
+ # wx = color[x]
38
+ # println(">>> $x has color = $wx")
34
39
if color[x]!= 0
35
- println (" >>> $wx != 0" )
36
- fbc = forbidden_color [color[x]]
37
- println (" >>> forbidden color[$wx ] = $fbc " )
40
+ # println(">>> $wx != 0")
41
+ # fbc = forbidden_colors [color[x]]
42
+ # println(">>> forbidden color[$wx] = $fbc")
38
43
if forbidden_colors[color[x]] != v
39
- println (" >>> $fbc != $v " )
40
- println (" >>> calling prevent cycle with $v , $w , $x " )
44
+ # println(">>> $fbc != $v")
45
+ # println(">>> calling prevent cycle with $v, $w, $x")
41
46
prevent_cycle! (v, w, x, g, set, first_visit_to_tree, forbidden_colors,color)
42
47
end
43
48
end
44
49
end
45
50
end
46
51
end
47
52
48
- println (" >>> third block" )
53
+ # println(">>> third block")
49
54
color[v] = min_index (forbidden_colors, v)
50
- vc = color[v]
51
- println (" >>> color of v = $vc " )
55
+ # vc = color[v]
56
+ # println(">>> color of v = $vc")
52
57
for w in outneighbors (g, v)
53
- println (" >>> w = $w " )
58
+ # println(">>> w = $w")
54
59
if color[w]!= 0
55
- println (" >>> calling grow star for v = $v , w = $w " )
60
+ # println(">>> calling grow star for v = $v, w = $w")
56
61
grow_star! (v, w, g, set,first_neighbor,color)
57
62
end
58
63
end
59
64
60
- println (" >>> fourth block" )
65
+ # println(">>> fourth block")
61
66
for w in outneighbors (g, v)
62
- println (" >>> w = $w "
67
+ # println(">>> w = $w")
63
68
if color[w]!= 0
64
- wc = color[w]
65
- println (" >>> $w has non zero color = $wc " )
69
+ # wc = color[w]
70
+ # println(">>> $w has non zero color = $wc")
66
71
for x in outneighbors (g, w)
67
- wx = color[x]
68
- println (" >>> x = $x " )
72
+ # wx = color[x]
73
+ # println(">>> x = $x")
69
74
if color[x]!= 0 && x!= v
70
- println (" >>> $x has nonzero color = $wx " )
75
+ # println(">>> $x has nonzero color = $wx")
71
76
if color[x]== color[v]
72
77
merge_trees! (v,w,x,g,set)
73
78
end
@@ -79,10 +84,16 @@ function color_graph(g::LightGraphs.AbstractGraph, ::AcyclicColoring)
79
84
return color
80
85
end
81
86
87
+ function init_array! (array, n)
88
+ for i in 1 : n
89
+ push! (array,(0 ,0 ))
90
+ end
91
+ end
92
+
82
93
function prevent_cycle! (v:: Int , w:: Int , x:: Int , g, set, first_visit_to_tree, forbidden_colors,color)
83
94
e = find (w, x, g, set)
84
95
p, q = first_visit_to_tree[e]
85
- println (" >>> first visit to tree : p = $p , q = $q " )
96
+ # println(">>> first visit to tree : p = $p, q = $q")
86
97
if p != v
87
98
first_visit_to_tree[e] = (v,w)
88
99
elseif q != w
93
104
function grow_star! (v, w,g,set,first_neighbor,color)
94
105
make_set! (v,w,g,set)
95
106
p, q = first_neighbor[color[w]]
96
- wc = color[w]
97
- println (" >>> color of w = $wc " )
98
- println (" >>> first neighbor : p = $p , q = $q " )
107
+ # wc = color[w]
108
+ # println(">>> color of w = $wc")
109
+ # println(">>> first neighbor : p = $p, q = $q")
99
110
if p != v
100
111
first_neighbor[color[w]] = (v,w)
101
112
else
0 commit comments