第20講 一般種法による魔方陣ソフトの高速化
第2話 新しい番号付けのヒントその1


混沌として方針が全然見えない、出口のない迷宮のように見えた問題も、
次のように色塗りをすると急に展望が開けてきます。

0 1 2 3 4 5 6 7 8 9
0 0 20 21 22 23 24 25 26 27 10
1 28 1 36 37 38 39 40 41 11 42
2 29 43 2 50 51 52 53 12 54 55
3 30 44 56 3 62 63 13 64 65 66
4 31 45 57 67 4 14 72 73 74 75
5 32 46 58 68 15 5 80 81 82 83
6 33 47 59 16 76 84 6 88 89 90
7 34 48 17 69 77 85 91 7 94 95
8 35 18 60 70 78 86 92 96 8 98
9 19 49 61 71 79 87 93 97 99 9

例えば、数列20,36,50,62,72には明確な規則性が存在します。
数列80,88,94,98も同様です。
残りの数列
28,43,56,67,76
84,91,96,99
にも明確な法則性があります。
したがって、4つに場合分けを行えば偶数版については展望が見えてきました。

奇数番についても、
(19次の場合)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
0 0 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 19
1  54 1 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 20 86
2 55 87 2 103 104 105 106 107 108 109 110 111 112 113 114 115 21 116 117
3 56 88 118 3 133 134 135 136 137 138 139 140 141 142 143 22 144 145 146
4 57 89 119 147 4 161 162 163 164 165 166 167 168 169 23 170 171 172 173
5 58 90 120 148 174 5 187 188 189 190 191 192 193 24 194 195 196 197 198
6 59 91 121 149 175 199 6 211 212 213 214 215 25 216 217 218 219 220 221
7 60 92 122 150 176 200 222 7 233 234 235 26 236 237 238 239 240 241 242
8 61 93 123 151 177 201 223 243 8 253 27 254 255 256 257 258 259 260 261
9 62 94 124 152 178 202 224 244 262 9 271 272 273 274 275 276 277 278 279
10 63 95 125 153 179 203 225 245 28 280 10 289 290 291 292 293 294 295 296
11 64 96 126 154 180 204 226 29 263 281 297 11 305 306 307 308 309 310 311
12 65 97 127 155 181 205 30 246 264 282 298 312 12 319 320 321 322 323 324
13 66 98 128 156 182 31 227 247 265 283 299 313 325 13 331 332 333 334 335
14 67 99 129 157 32 206 228 248 266 284 300 314 326 336 14 341 342 343 344
15 68 100 130 33 183 207 229 249 267 285 301 315 327 337 345 15 349 350 351
16 69 101 34 158 184 208 230 250 268 286 302 316 328 338 346 352 16 355 356
17 70 35 131 159 185 209 231 251 269 287 303 317 329 339 347 353 357 17 359
18 36 102 132 160 186 210 232 252 270 288 304 318 330 340 348 354 358 360 18

のように色塗りを行うと、全く見えなかった法則性が見えてきます。
例えば、数列
37,71,103,133,161,187,211,233,253
には明確な規則性があります。

規則が見えない方は、数列の差(階差数列という)をとってみてください。


4つに場合分けを行い、各数列の規則性を使えば普遍的な番号付けプログラミングは可能です。
今回は、ヒントがありますので皆さんへの課題とします。
もちろん、超難解であるということは言うまでもありません。

偶数版も奇数番も二つの場合分け(奇数番で言えば黄色水色)は、川(対角線または逆対角線)を跨いでいます。
川を跨ぐのときの処理は、前の番号付けで経験済みですよね。







第20講第1話へ 第20講(旧講義)第3話へ 



VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座