Javaでグラフを表現する最良の方法は何ですか?私はこのようにしました:ユニエイト有向グラフを表現し、最短経路を見つける方法は? Java
public class Node<T> {
public T data;
public LinkedList<Node> children;
public Node(T data) {
this.data = data;
this.children = new LinkedList<Node>(); //here there are the connected nodes of the node
}
public T getData() {
return this.data;
}
public void addArch(Node n) {
children.add(n);
}
public class Graph <T> {
private Node<T> source = new Node(null);
private Node<T> target = new Node(null);
private ArrayList<Node> nodes = new ArrayList<Node>();
public Graph() {}
public void addNode(T v) {
boolean visto = false;
for (Node n: nodes) {
if (n.getData().equals(v)) {
visto = true;
}
}
if (visto == false) {
nodes.add(new Node(v));
}
}
public void addEdge(T p, T a) throws NoSuchNodeException {
boolean visto = false;
boolean visto_secondo = false;
for (Node n: nodes) {
if (n.getData().equals(p)) {
visto = true;
}
}
for (Node n: nodes) {
if (n.getData().equals(a)) {
visto_secondo = true;
}
}
if (visto == false || visto_secondo == false) {
throw new NoSuchNodeException();
}
else {
for (Node n : nodes) {
if (p.equals(n.getData())) {
System.out.print(a);
n.addArch(new Node(a));
}
}
}
}
私は最短経路を見つけなければなりませんが、アーチが追加されていないようです、なぜですか?私もセットをして、ソースとターゲットを取得します。しかし、私はこのソースとターゲットの間に最短経路を見つける必要があります、どのアルゴリズムを使用するのですか?私は最短経路を得るためにbfsを使う必要があるが、私の問題はアーチを反復する方法だと思う。私は思う再帰関数を実行する必要がある。
私は子供を探索する再帰関数を行う方法がわからないので、そうは思われません。追加されません。 Nodeクラスで実装する必要がありますが、source.recursivefunction()を実行しても何も探索しません。 – HKing