我有对 (a1,b1) , (a2, b2) ..... (an,bn) 我想生成所有 2^n 列表。使用递归这很容易,就像找到字符串的所有排列一样,但是我想迭代地做。请建议我一种方法来做到这一点。
需要明确的是,列表的第一个位置可以是 a1 或 b1,第二个位置可以是 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,如果我通过引用传递,代码将不起作用