(a1,b1) 、 (a2, b2) ..... (an,bn) のペアがあります。2^n 個のリストをすべて生成したいと考えています。再帰を使用すると、これは簡単で、文字列のすべての順列を見つけるようなものですが、繰り返し実行したいと考えています。これを行う方法を教えてください。
明確にするために、リストの 1 位は a1 または b1、2 位は a2 または b2、i 位は ai または bi、n 位は an または bn です。
例: (a1 a2 .... an) (b1 b2 ..... bn) (b1 a2 ...an) (a1 b2 .....an) (すべての 2^n リスト)
n=3 の場合の再帰コードの例を次に示します。
#include <iostream>
#include <string>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
void compute( int a[][2],int i,vector<int> v)
{
if(i==3)
{
for(int j=0;j<v.size();j++)
cout<<v[j]<<" ";
cout<<endl;
return;
}
for(int j=0;j<=1;j++)
{
if(j==1) v.pop_back();
v.push_back(a[i][j]);
compute(a,i+1,v);
}
}
int main()
{
float ans=0;
int a[3][2];
for(int i=0;i<=2;i++)
{
for(int j=0;j<=1;j++)
cin>>a[i][j];
}
vector <int> v;
compute(a,0,v);
}
繰り返しコードを使用して、速度とさらに重要なスペースの両方の点でパフォーマンスを向上させたいと考えています。これは、値を渡す必要があるため、新しいベクトル v が毎回作成され、参照渡しするとコードが機能しないためです。