コード例 #1
0
  public G generate(int N, int k, double p) {
    G graph = ringLatticeGenerator.generate(N, k);

    Set<Edge> edges = new HashSet<Edge>();
    for (Edge edge : graph.getEdges()) {
      if (random.nextDouble() < p) {
        edges.add(edge);
      }
    }

    List<V> vertices = new ArrayList<V>(graph.getVertices().size());
    vertices.addAll((Collection<? extends V>) graph.getVertices());

    int doubleEdges = 0;

    for (Edge edge : edges) {
      V source;

      if (random.nextBoolean()) {
        source = (V) edge.getVertices().getFirst();
      } else {
        source = (V) edge.getVertices().getSecond();
      }

      builder.removeEdge(graph, (E) edge);
      V target = null;
      while (target == null) {
        target = vertices.get(random.nextInt(vertices.size()));
        if (source == target) target = null;
      }

      if (builder.addEdge(graph, source, target) == null) doubleEdges++;
    }

    logger.debug(String.format("Rejected %1$s double edges.", doubleEdges));

    return graph;
  }