C/C++の宿題を片付けます 59代目
■ このスレッドは過去ログ倉庫に格納されています
0207デフォルトの名無しさん
2006/01/28(土) 22:24:46遅くなっちゃったなあ.解析解がありそうな気がするけど,まあバックトラック.
#include <stdio.h>
#define N 5
int count;
void solve(int work[], int used[], int size, int pos) {
int i;
if (pos >= size) {
for (i = 0; i < size; ++i)
printf("%c%d", (i == 0 ? '(' : ','), work[i]);
printf(")\n");
++count;
}
for (i = 0; i < size; ++i)
if (!used[i] && pos != i)
work[pos] = i, used[i] = 1, solve(work, used, size, pos+1), used[i] = 0;
}
main() {
int work[N], used[N], i;
for (i = 0; i < N; ++i) used[i] = 0;
solve(work, used, N, 0);
printf("number of dearangement for %d = %d\n", N, count);
}
■ このスレッドは過去ログ倉庫に格納されています