code: public double compute( DMatrix1Row mat ) {
          if( width != mat.numCols || width != mat.numRows ) {
              throw new RuntimeException("Unexpected matrix dimension");
          }
  
          // make sure everything is in the proper state before it starts
          initStructures();
  
  //        System.arraycopy(mat.data,0,minorMatrix[0],0,mat.data.length);
  
          int level = 0;
          while( true ) {
              int levelWidth = width-level;
              int levelIndex = levelIndexes[level];
  
              if( levelIndex == levelWidth ) {
                  if( level == 0 ) {
                      return levelResults[0];
                  }
                  int prevLevelIndex = levelIndexes[level-1]++;
  
                  double val = mat.get((level-1)*width+levelRemoved[level-1]);
                  if( prevLevelIndex % 2 == 0 ) {
                      levelResults[level-1] += val * levelResults[level];
                  } else {
                      levelResults[level-1] -= val * levelResults[level];
                  }
  
                  putIntoOpen(level-1);
  
                  levelResults[level] = 0;
                  levelIndexes[level] = 0;
                  level--;
              } else {
                  int excluded = openRemove( levelIndex );
  
                  levelRemoved[level] = excluded;
  
                  if( levelWidth == minWidth ) {
                      createMinor(mat);
                      double subresult = mat.get(level*width+levelRemoved[level]);
  
                      subresult *= UnrolledDeterminantFromMinor_DDRM.det(tempMat);
  
                      if( levelIndex % 2 == 0 ) {
                          levelResults[level] += subresult;
                      } else {
                          levelResults[level] -= subresult;
                      }
  
                      // put it back into the list
                      putIntoOpen(level);
                      levelIndexes[level]++;
                  } else {
                      level++;
                  }
              }
          }
      }
docs: Computes the determinant for the specified matrix.  It must be square and have
  the same width and height as what was specified in the constructor.
  
  @param mat The matrix whose determinant is to be computed.
  @return The determinant.