第9講 関数の再帰的使用
第9話 普遍的n次生成ソフト開発
実行画面
これはすべての順列を求めるソフトです。
何の順列を発生させるのかをnに入力してエンターして下さい。
n=4
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個です。
を実現するソフトのコード例
#include<iostream> //入出力のために組み込む
using namespace std; //coutを使うために必要なお呪い
void f(int g);
int x[25]; //将来5次魔方陣まで生成できるように25に変更
int n,cn; //aをnに変更 変更理由はnuberの頭文字nは整数を表す場合が多いからです
int main() {
cout<< "これはすべての順列を求めるソフトです。" << endl;
cout<< "何の順列を発生させるのかをnに入力してエンターして下さい。" << endl;
cout<< "n=";
scanf("%d", &n);
cn=0;
f(0);
cout << "生成された順列は" << cn << "個です"
<< endl;
return(0);
}
void f(int g){
int i,j,h;
for(i=0;i<n;i++){
if(g==0)x[g]=i+1;
h=1;
if(g>0){
for(j=0;j<g;j++){
if(x[j]==i+1){
h=0;
break;
}
}
if(h==1)x[g]=i+1;
}
if(h==1){
if (g+1 < n){
f(g+1);
}
else{
for(j=0;j<n;j++)cout << x[j] << " ";
cout << endl;
cn++;
}
}
}
}
これはソフトやアプリの名に恥じないプログラムです。
キーボードからnの値を入力してやれば、
何次でも自動生成できるからです。
ただし、30次辺りになると膨大な時間がかかりますが。
ですが、皆さんの頭の中は爆発しそうになっていませんか。
いや、もうすでに爆発しているよ!
という人もいるでしょうね。
第10話で詳しく解説しましょう。