Cómo diseñar un algoritmo para imprimir todas las combinaciones de elementos en una matriz de tamaño m * n

#include using namespace std; vector C;
vector < vector > A;
int m,n; void print_combinations(int curr)
{
if(curr==n)
{
for(int i=0;i<n;++i)
cout<<C[i]<<' ';
cout<<endl;
}
else
{
for(int i=0;i<m;i++)
{
C[curr] = A[i][curr];
print_combinations(curr+1);
}
}
} int main()
{
ios_base::sync_with_stdio(false);
cin>>m>>n;
A.resize(m);
for(int i=0;i<m;i++)
A[i].resize(n);
C.resize(n);
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
cin>>A[i][j];
print_combinations(0);
return 0;
}

#include using namespace std; vector C;
vector < vector > A;
int m,n; void print_combinations(int curr)
{
if(curr==n)
{
for(int i=0;i<n;++i)
cout<<C[i]<<' ';
cout<<endl;
}
else
{
for(int i=0;i<m;i++)
{
C[curr] = A[i][curr];
print_combinations(curr+1);
}
}
} int main()
{
ios_base::sync_with_stdio(false);
cin>>m>>n;
A.resize(m);
for(int i=0;i<m;i++)
A[i].resize(n);
C.resize(n);
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
cin>>A[i][j];
print_combinations(0);
return 0;
}

#include using namespace std; vector C;
vector < vector > A;
int m,n; void print_combinations(int curr)
{
if(curr==n)
{
for(int i=0;i<n;++i)
cout<<C[i]<<' ';
cout<<endl;
}
else
{
for(int i=0;i<m;i++)
{
C[curr] = A[i][curr];
print_combinations(curr+1);
}
}
} int main()
{
ios_base::sync_with_stdio(false);
cin>>m>>n;
A.resize(m);
for(int i=0;i<m;i++)
A[i].resize(n);
C.resize(n);
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
cin>>A[i][j];
print_combinations(0);
return 0;
}

#include using namespace std; vector C;
vector < vector > A;
int m,n; void print_combinations(int curr)
{
if(curr==n)
{
for(int i=0;i<n;++i)
cout<<C[i]<<' ';
cout<<endl;
}
else
{
for(int i=0;i<m;i++)
{
C[curr] = A[i][curr];
print_combinations(curr+1);
}
}
} int main()
{
ios_base::sync_with_stdio(false);
cin>>m>>n;
A.resize(m);
for(int i=0;i<m;i++)
A[i].resize(n);
C.resize(n);
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
cin>>A[i][j];
print_combinations(0);
return 0;
}

#include using namespace std; vector C;
vector < vector > A;
int m,n; void print_combinations(int curr)
{
if(curr==n)
{
for(int i=0;i<n;++i)
cout<<C[i]<<' ';
cout<<endl;
}
else
{
for(int i=0;i<m;i++)
{
C[curr] = A[i][curr];
print_combinations(curr+1);
}
}
} int main()
{
ios_base::sync_with_stdio(false);
cin>>m>>n;
A.resize(m);
for(int i=0;i<m;i++)
A[i].resize(n);
C.resize(n);
for(int i=0;i<m;++i)
for(int j=0;j<n;++j)
cin>>A[i][j];
print_combinations(0);
return 0;
}