Hi,
I'm writing a small piece of code finding the number of unique 3D arrays in a N*3 array.
I first sort the N*3 array, and apply a "condition" function : if the consecutive 3D arrays do not have the same element, then the unique number count +1.
Here is the code:
#include <iostream>
using namespace std;
int condition(double **A, int index, int col);
int unique_multiD(double** list, int xcol, int ycol);
int main()
{
double data[][3] = {{1,2,3},{2,3,2},{3,2,1},{3,2,1},{1,3,2},{3,2,3},{3,2,1},{3,2,3}};
// -- main function ----
const int ycol = sizeof(data[0])/sizeof(data[0][0]);
const int xcol = sizeof(data)/sizeof(data[0]);
int unique = 0;
double **list = new double*[xcol];
for(int i = 0; i < xcol; i++) list[i] = new double[ycol];
for(int i = 0; i < xcol; i++) list[i] = &data[i][0];
unique = unique_multiD(list,xcol,ycol);
cout << "unique number = " << unique << endl;
// -- ||| main function ends ----------|||
cin.get();
return 0;
}
int condition(double **A, int index, int ycol){//to determine if A[index] is unique
int unique = 0;
for(int i = 0; i < ycol; i++)
if(A[index][i] != A[index+1][i]) unique++;
if(unique != 0) unique = 1;
return unique;
}
int unique_multiD(double** list, int xcol, int ycol)//sort the array and identify unique values
{
double* extemp = new double[3];
//-- sorting --
int cri;
for(int t = 0; t < ycol; t++){//3 elements
for(int j = 0; j < xcol; j++){//
cri = 0;
for(int k = j+1; k < xcol; k++){
for(int i = 0; i < t; i++) if(list[j][i] != list[k][i]) cri = 1;
if(cri == 1) break;
if(list[j][t] > list[k][t]){
extemp = list[k];
list[k] = list[j];
list[j] = extemp;
}
}
}
// --- unique values --------------
if(t == ycol-1){
for(int j = 0; j < xcol-1; j++) unique += condition(list, j,ycol);//calling the condition function gives me error
}
}
}
As you could see that I'm calling the *condition* function inside the *unique_multiD* function. Is there anyway that I could get around with it?
Thanks.