// генерируем подграфы на множестве вершин 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); } }