示例#1
0
 // генерируем подграфы на множестве вершин v (закодировано)
 private void generateSubgraphs(int v) {
   List<Integer> edges = new ArrayList<Integer>();
   // для любого ребря графа, проверяем, можно ли его добавить в подграф
   for (Integer e : matrix) {
     if (isEdgeBasedOnVertexs(e, v)) edges.add(e);
   }
   // создаем подграфы из множества вершин v и всех возможных комбинаций
   // ребер из edges
   // то есть тех, которые можно добавить в этот подграф
   for (int e = 0; e < Math.pow(2d, edges.size()); e++) {
     SubGraph sub = new SubGraph(this.v, v);
     for (int k = e, i = 0; k > 0; k /= 2, i++) {
       if (k % 2 == 1) sub.addEdge(edges.get(i));
     }
     subgraphs.add(sub);
   }
 }