組合せスケジューリング(4)

n=8とする。
まず、円を書く。その中心に0と書く。その上の円周上に1と書く。そこから右回りに等間隔に7までの数字を書く。そして、水平になった数字を線で結ぶ。0と1も結ぶ。そうすると次のようになる。


これが、最初の組合せである。線を右回りに回す。そうすると線で結んだペアが次の組合せである。こうして次々に7つの組合せが作られる。線で結んだ数字の間隔は上からそれぞれ2、3、1とそれぞれ違うので、組合せが重複することはない。
これをPythonで書くと、


n = 8
for i in range(n - 1):
a = [ ]
for k in range(0, n / 2):
if k == 0:
a.append([ 0, i + 1 ])
else:
b1 = (k + i) % (n - 1) + 1
b2 = (n - 1 - k + i) % (n - 1) + 1
a.append([ b1, b2 ])
print(a)

実行すると次のようになった。


[ [0, 1], [2, 7], [3, 6], [4, 5] ]
[ [0, 2], [3, 1], [4, 7], [5, 6] ]
[ [0, 3], [4, 2], [5, 1], [6, 7] ]
[ [0, 4], [5, 3], [6, 2], [7, 1] ]
[ [0, 5], [6, 4], [7, 3], [1, 2] ]
[ [0, 6], [7, 5], [1, 4], [2, 3] ]
[ [0, 7], [1, 6], [2, 5], [3, 4] ]