Пример #1
0
  public DirectedSparseMultigraph<FSANode, FSAEdge> getVisualGraph() {
    DirectedSparseMultigraph<FSANode, FSAEdge> g = new DirectedSparseMultigraph<FSANode, FSAEdge>();
    Queue<FSANode> q = new LinkedList<>();
    q.add(start);
    g.addVertex(start);
    FSANode curNode;
    FSANode nextNode;
    Set<FSANode> seenNodes = new HashSet<>();
    seenNodes.add(start);
    while (!q.isEmpty()) {
      curNode = q.remove();
      for (FSAEdge edge : curNode.getOutgoingEdges()) {
        nextNode = edge.getTarget();
        if (!seenNodes.contains(nextNode) && !nextNode.equals(curNode)) {
          g.addVertex(nextNode);
          q.add(nextNode);
          seenNodes.add(nextNode);
        }

        FSAEdge existingEdge = g.findEdge(curNode, nextNode);
        if (g.findEdge(curNode, nextNode) != null) {
          g.removeEdge(existingEdge);
          edge = edge.mergeLabel(existingEdge);
        }

        g.addEdge(edge, curNode, nextNode);
      }
    }
    return g;
  }