組合せの生成
$ n と $ m を与えると $ 1,2,\ldots,n から $ m 個を選ぶ組合せ $ _nC_m 通りをすべて生成する。
code:combn.c
#include <stdio.h>
void show(int m, int a[])
{
int i;
static int count = 0;
for (i = 0; i < m; i++) {
printf(" %d", ai);
}
printf(": %d\n", ++count);
}
int main(void)
{
int n = 9, m = 5; /* 入力 */
int am, e = 0, h = m, i;
for (i = 0; i < m; i++) {
ai = i + 1;
}
show(m, a);
while (a0 <= n - m) {
if (e < n - h) {
h = 1;
e = am - 1;
am - h = e + 1;
} else {
e = am - h - 1;
h = h + 1;
for (i = 0; i < h; i++) {
am - h + i = e + i + 1;
}
}
show(m, a);
}
}