特別なグラフでリーフからルートへのすべてのパスを取得する方法

カタリナ:

私は、グラフ形式で特殊なデータ構造のアルゴリズムを実装しようとしています。ルートに葉(Target要素)からのすべてのパスを取得するための私の目標イスト。これは、グラフは以下の画像のように見える方法です。

Yonlif:

我々はそのためだけの状態の一覧が十分ではありません、グラフ上のさまざまな方法の全てにトラバースするために、我々はパスのリストを必要としていたこと、パスのすべてを覚えておく必要があります。それは片方の親を持っており、それが二つ以上を持っている場合、我々は、このリストを複製し、それぞれに親を追加する場合、すべてのパスのために我々は1で、それが長くなります。

さて私は、Javaで素晴らしいではないと私はこれが実行される保証することはできませんので、私はこのコードを実行することはできませんが、アルゴリズムはokです。

public static List<ARGState> getAllErrorStatesReversed(ReachedSet reachedSet) {
  ARGState pIsStart =
      AbstractStates.extractStateByType(reachedSet.getFirstState(), ARGState.class);
  ARGState pEnd = targetStates.get(0);

  List<List<ARGState>> results = new ArrayList<>();
  List<List<ARGState>> paths = new ArrayList<>();

  paths.add(new ArrayList<ARGState>(pEnd));

  // This is assuming from each node there is a way to go to the start
  // Go on until all the paths got the the start
  while (!paths.empty()) {
    // Expand the last path on your list
    List<ARGState> curPath = paths.remove(paths.size() - 1);
    // If there is no more to expand - add this path and continue
    if (curPath.get(curPath.size() - 1) == pIsStart) {
      results.append(curPath);
      continue;
    }

    // Expand the path
    Iterator<ARGState> parents = curPath.get(curPath.size() - 1).getParents().iterator();
    // Add all parents
    while (parentElement.hasNext()) {
      ARGState parentElement = parents.next();
      List<ARGState> tmp = new ArrayList<ARGState>(List.copyOf(curPath));
      tmp.add(parentElement);
      paths.add(tmp);
    }
  }
  return results;
}

より多くの歓迎を依頼するよりも、あなたが理解してほしいです。
幸運を

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=367576&siteId=1