7
7
"time"
8
8
)
9
9
10
- func option (m * MCC , p , head , score int ) Option {
10
+ func (m * MCC ) option ( p , head , score int ) Option {
11
11
var opt Option
12
12
cl , nd := m .cl , m .nd
13
13
@@ -46,7 +46,7 @@ func option(m *MCC, p, head, score int) Option {
46
46
return opt
47
47
}
48
48
49
- func hide (m * MCC , rr int ) {
49
+ func (m * MCC ) hide ( rr int ) {
50
50
nd := m .nd
51
51
for nn := rr + 1 ; nn != rr ; {
52
52
if nd [nn ].color >= 0 {
@@ -64,19 +64,19 @@ func hide(m *MCC, rr int) {
64
64
}
65
65
}
66
66
67
- func cover (m * MCC , c int , deact bool ) {
67
+ func (m * MCC ) cover ( c int , deact bool ) {
68
68
cl , nd := m .cl , m .nd
69
69
if deact {
70
70
l , r := cl [c ].prev , cl [c ].next
71
71
cl [l ].next , cl [r ].prev = r , l
72
72
}
73
73
m .updates ++
74
74
for rr := nd [c ].down ; rr >= m .lastItm ; rr = nd [rr ].down {
75
- hide (m , rr )
75
+ m . hide (rr )
76
76
}
77
77
}
78
78
79
- func unhide (m * MCC , rr int ) {
79
+ func (m * MCC ) unhide ( rr int ) {
80
80
nd := m .nd
81
81
for nn := rr + 1 ; nn != rr ; {
82
82
if nd [nn ].color >= 0 {
@@ -93,47 +93,47 @@ func unhide(m *MCC, rr int) {
93
93
}
94
94
}
95
95
96
- func uncover (m * MCC , c int , react bool ) {
96
+ func (m * MCC ) uncover ( c int , react bool ) {
97
97
cl , nd := m .cl , m .nd
98
98
for rr := nd [c ].down ; rr >= m .lastItm ; rr = nd [rr ].down {
99
- unhide (m , rr )
99
+ m . unhide (rr )
100
100
}
101
101
if react {
102
102
l , r := cl [c ].prev , cl [c ].next
103
103
cl [r ].prev , cl [l ].next = c , c
104
104
}
105
105
}
106
106
107
- func purify (m * MCC , p int ) {
107
+ func (m * MCC ) purify ( p int ) {
108
108
nd := m .nd
109
109
cc := nd [p ].itm
110
110
x := nd [p ].color
111
111
nd [cc ].color = x
112
112
m .cleansings ++
113
113
for rr := nd [cc ].down ; rr >= m .lastItm ; rr = nd [rr ].down {
114
114
if nd [rr ].color != x {
115
- hide (m , rr )
115
+ m . hide (rr )
116
116
} else if rr != p {
117
117
m .cleansings ++
118
118
nd [rr ].color = - 1
119
119
}
120
120
}
121
121
}
122
122
123
- func unpurify (m * MCC , p int ) {
123
+ func (m * MCC ) unpurify ( p int ) {
124
124
nd := m .nd
125
125
cc := nd [p ].itm
126
126
x := nd [p ].color
127
127
for rr := nd [cc ].up ; rr >= m .lastItm ; rr = nd [rr ].up {
128
128
if nd [rr ].color < 0 {
129
129
nd [rr ].color = x
130
130
} else if rr != p {
131
- unhide (m , rr )
131
+ m . unhide (rr )
132
132
}
133
133
}
134
134
}
135
135
136
- func tweak (m * MCC , n , block int ) {
136
+ func (m * MCC ) tweak ( n , block int ) {
137
137
nd := m .nd
138
138
nn := n
139
139
if block != 0 {
@@ -158,7 +158,7 @@ func tweak(m *MCC, n, block int) {
158
158
}
159
159
}
160
160
161
- func untweak (m * MCC , c , x , unblock int ) {
161
+ func (m * MCC ) untweak ( c , x , unblock int ) {
162
162
nd := m .nd
163
163
z := nd [c ].down
164
164
nd [c ].down = x
@@ -167,19 +167,19 @@ func untweak(m *MCC, c, x, unblock int) {
167
167
nd [rr ].up = qq
168
168
k ++
169
169
if unblock != 0 {
170
- unhide (m , rr )
170
+ m . unhide (rr )
171
171
}
172
172
}
173
173
nd [rr ].up = qq
174
174
nd [c ].itm += k
175
175
if unblock == 0 {
176
- uncover (m , c , false )
176
+ m . uncover (c , false )
177
177
}
178
178
}
179
179
180
180
// Dance generates all exact covers
181
181
func (m * MCC ) Dance (rd io.Reader ) Result {
182
- if err := inputMatrix (m , rd ); err != nil {
182
+ if err := m . inputMatrix (rd ); err != nil {
183
183
panic (err )
184
184
}
185
185
@@ -252,7 +252,7 @@ func (m *MCC) Dance(rd io.Reader) Result {
252
252
if head == 0 {
253
253
head = nd [cc ].down
254
254
}
255
- sol [k ] = option (m , pp , head , scor [k ])
255
+ sol [k ] = m . option (pp , head , scor [k ])
256
256
}
257
257
258
258
select {
@@ -278,11 +278,11 @@ func (m *MCC) Dance(rd io.Reader) Result {
278
278
cl [bestItm ].bound --
279
279
280
280
if cl [bestItm ].bound == 0 && cl [bestItm ].slack == 0 {
281
- cover (m , bestItm , true )
281
+ m . cover (bestItm , true )
282
282
} else {
283
283
firstTweak [level ] = curNode
284
284
if cl [bestItm ].bound == 0 {
285
- cover (m , bestItm , true )
285
+ m . cover (bestItm , true )
286
286
}
287
287
}
288
288
@@ -294,7 +294,7 @@ func (m *MCC) Dance(rd io.Reader) Result {
294
294
} else if nd [bestItm ].itm <= cl [bestItm ].bound - cl [bestItm ].slack {
295
295
goto backup
296
296
} else if curNode != bestItm {
297
- tweak (m , curNode , cl [bestItm ].bound )
297
+ m . tweak (curNode , cl [bestItm ].bound )
298
298
} else if cl [bestItm ].bound != 0 {
299
299
p , q := cl [bestItm ].prev , cl [bestItm ].next
300
300
cl [p ].next , cl [q ].prev = q , p
@@ -303,9 +303,9 @@ func (m *MCC) Dance(rd io.Reader) Result {
303
303
if m .Debug {
304
304
fmt .Fprintf (os .Stderr , "L%d: " , level )
305
305
if cl [bestItm ].bound == 0 && cl [bestItm ].slack == 0 {
306
- option (m , curNode , nd [bestItm ].down , score )
306
+ m . option (curNode , nd [bestItm ].down , score )
307
307
} else {
308
- option (m , curNode , firstTweak [level ], score )
308
+ m . option (curNode , firstTweak [level ], score )
309
309
}
310
310
}
311
311
@@ -319,13 +319,13 @@ func (m *MCC) Dance(rd io.Reader) Result {
319
319
if cc < m .second {
320
320
cl [cc ].bound --
321
321
if cl [cc ].bound == 0 {
322
- cover (m , cc , true )
322
+ m . cover (cc , true )
323
323
}
324
324
} else {
325
325
if nd [pp ].color == 0 {
326
- cover (m , cc , true )
326
+ m . cover (cc , true )
327
327
} else if nd [pp ].color > 0 {
328
- purify (m , pp )
328
+ m . purify (pp )
329
329
}
330
330
}
331
331
pp ++
@@ -345,9 +345,9 @@ func (m *MCC) Dance(rd io.Reader) Result {
345
345
346
346
backup: // Restore the original state of bestItm
347
347
if cl [bestItm ].bound == 0 && cl [bestItm ].slack == 0 {
348
- uncover (m , bestItm , true )
348
+ m . uncover (bestItm , true )
349
349
} else {
350
- untweak (m , bestItm , firstTweak [level ], cl [bestItm ].bound )
350
+ m . untweak (bestItm , firstTweak [level ], cl [bestItm ].bound )
351
351
}
352
352
cl [bestItm ].bound ++
353
353
@@ -376,14 +376,14 @@ func (m *MCC) Dance(rd io.Reader) Result {
376
376
} else {
377
377
if cc < m .second {
378
378
if cl [cc ].bound == 0 {
379
- uncover (m , cc , true )
379
+ m . uncover (cc , true )
380
380
}
381
381
cl [cc ].bound ++
382
382
} else {
383
383
if nd [pp ].color == 0 {
384
- uncover (m , cc , true )
384
+ m . uncover (cc , true )
385
385
} else if nd [pp ].color > 0 {
386
- unpurify (m , pp )
386
+ m . unpurify (pp )
387
387
}
388
388
}
389
389
pp --
0 commit comments