static getSSSR(c, d, adjacencyMatrix, pe, pe_prime, arrBondCount, arrRingCount, nsssr) {
    let cSssr = Array();
    let allBonds = Array();

    for (let i = 0; i < c.length; i++) {
      if (c[i][0] % 2 !== 0) {
        for (let j = 0; j < c[i][2].length; j++) {
          let bonds = c[i][1][0].concat(c[i][2][j]); // Some bonds are added twice, resulting in [[u, v], [u, v]] instead of [u, v].
          // TODO: This is a workaround, fix later. Probably should be a set rather than an array, however the computational overhead
          //       is probably bigger compared to leaving it like this.

          for (var k = 0; k < bonds.length; k++) {
            if (bonds[k][0].constructor === Array) bonds[k] = bonds[k][0];
          }

          let atoms = SSSR.bondsToAtoms(bonds);

          if (SSSR.getBondCount(atoms, adjacencyMatrix) === atoms.size && !SSSR.pathSetsContain(cSssr, atoms, bonds, allBonds, arrBondCount, arrRingCount)) {
            cSssr.push(atoms);
            allBonds = allBonds.concat(bonds);
          }

          if (cSssr.length > nsssr) {
            return cSssr;
          }
        }
      } else {
        for (let j = 0; j < c[i][1].length - 1; j++) {
          let bonds = c[i][1][j].concat(c[i][1][j + 1]); // Some bonds are added twice, resulting in [[u, v], [u, v]] instead of [u, v].
          // TODO: This is a workaround, fix later. Probably should be a set rather than an array, however the computational overhead
          //       is probably bigger compared to leaving it like this.

          for (var k = 0; k < bonds.length; k++) {
            if (bonds[k][0].constructor === Array) bonds[k] = bonds[k][0];
          }

          let atoms = SSSR.bondsToAtoms(bonds);

          if (SSSR.getBondCount(atoms, adjacencyMatrix) === atoms.size && !SSSR.pathSetsContain(cSssr, atoms, bonds, allBonds, arrBondCount, arrRingCount)) {
            cSssr.push(atoms);
            allBonds = allBonds.concat(bonds);
          }

          if (cSssr.length > nsssr) {
            return cSssr;
          }
        }
      }
    }

    return cSssr;
  }
Searches the candidates for the smallest set of smallest rings.

@param {Array[]} c The candidates.
@param {Array[]} d The distance matrix.
@param {Array[]} adjacencyMatrix An adjacency matrix.
@param {Array[]} pe A matrix containing the shortest paths.
@param {Array[]} pe_prime A matrix containing the shortest paths + one vertex.
@param {Uint16Array} arrBondCount A matrix containing the bond count of each vertex.
@param {Uint16Array} arrRingCount A matrix containing the number of rings associated with each vertex.
@param {Number} nsssr The theoretical number of rings in the graph.
@returns {Set[]} The smallest set of smallest rings.