rendered paste bodyvoid Stack::addPlateauNeighborRecursive(double value,int h,int i,int j,
std::vector< std::vector<
std::vector<int> > > &tmpFlag,
std::vector< std::vector<int> >
&walkTmp) {
//Check only nearest neighbors
for(int a=-1 ; a<=1 ; a+=2 ) {
int hh = h+a;
if( hh>=0 && hh<D() && pix(hh,i,j)==value && !tmpFlag[hh][i][j] ) {
tmpFlag[hh][i][j]=1;
std::vector<int> tmpPos(3);
tmpPos[0]=hh;tmpPos[1]=i;tmpPos[2]=j;
walkTmp.push_back( tmpPos );
addPlateauNeighborRecursive(value,hh,i,j,tmpFlag,walkTmp);
}
int ii = i+a;
if( ii>=0 && ii<H() && pix(h,ii,j)==value && !tmpFlag[h][ii][j] ) {
tmpFlag[h][ii][j]=1;
std::vector<int> tmpPos(3);
tmpPos[0]=h;tmpPos[1]=ii;tmpPos[2]=j;
walkTmp.push_back( tmpPos );
addPlateauNeighborRecursive(value,h,ii,j,tmpFlag,walkTmp);
}
int jj = j+a;
if( jj>=0 && jj<W() && pix(h,i,jj)==value && !tmpFlag[h][i][jj] ) {
tmpFlag[h][i][jj]=1;
std::vector<int> tmpPos(3);
tmpPos[0]=h;tmpPos[1]=i;tmpPos[2]=jj;
walkTmp.push_back( tmpPos );
addPlateauNeighborRecursive(value,h,i,jj,tmpFlag,walkTmp);
}
}
}