第9講 関数の再帰的使用
第7話 4次順列を関数の再帰的使用を使わずにfor文で実現する
4次順列生成プログラム
#include<stdio.h>
void f(int n);
int main() {
f(4);
return(0);
}
void f(int n) {
int i, j, k, l,m,h,hh,hhh, x[20], cn = 0;
for (i = 0; i<n; i++) {
x[0] = i + 1;
for (j = 0; j<n; j++) {
h = 1;
if (j + 1 == x[0])h = 0;
if (h == 1)x[1] = j + 1;
if (h == 1) {
for(k=0;k<n;k++){
hh=1;
for(l=0;l<2;l++){
if(k+1==x[l]){
hh=0;
break;
}
}
if(hh==1)x[2] = k + 1;
if(hh==1){
for(l=0;l<n;l++){
hhh=1;
for(m=0;m<n;m++){
if(l+1==x[m]){
hhh=0;
break;
}
}
if(hhh==1)x[3]=l+1;
if(hhh==1){
for(m=0;m<n;m++){
printf("%d ",x[m]);
}
printf("\n");
cn++;
}
}
}
}
}
}
}
printf("生成された順列は%d個です。\n", cn);
}
実行画面
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
生成された順列は24個です。
いよいよ普遍版n次順列生成ソフトの開発をはじめたいと思いますが、
初心者どころか中級者にさえ難しい課題ですから、
ヒントを次話で説明します。