1

私は現在、ノードのグラフを取り、特徴的なパスの長さを返すプログラムを書いています(あるノードから他の各ノードまでのパスの長さを平均し、ノードごとに繰り返し、再び平均します)。私は他のすべてを行っていますが、あるノードから別のノードへの最短パスを見つけるために、ノードの深さ優先検索を実装する方法がわかりません。これは私がこれまでに持っているものです。

        int dist = 0;
        List<Node> path = new ArrayList<Node>();
        List<Node> shrtPath = new ArrayList<Node>();
        Node curNode = rtNode;
        if (rtNode == goalNode) {
            return dist;
        }
        path.add(curNode);
        for (int l = 0; l < rtNode.connections.size(); l++) {
            Node tempNode = new Node();
            curNode = rtNode.connections.get(l);
            for (int i = 0; i < curNode.connections.size(); i++) {
                tempNode = curNode.connections.get(i);
                path.add(tempNode);
                if (curNode.connections.get(i) == goalNode) {
                    if (path.size() < shrtPath.size()) {
                        shrtPath.clear();
                        shrtPath = path;
                    }
                }
            }
        }
        dist = shrtPath.size();
        return dist;

私はそれが不完全であることを知っていますが、ここからどこへ行くべきか、あるいは正しい方向に向かっているのかさえわかりません. ルート ノードとその接続を検索できるようにする必要があることはわかっていますが、接続の接続などをループする方法がわかりません。また、アクセスしたノードをマークする必要があることにも気付きました。Node クラスにはブール値があり、これはまだ実装していません。ここにも私のNodeクラスがあります。

import java.util.ArrayList;
import java.util.List;



public class Node {

    List <Node> connections = new ArrayList<Node>();
    int cons = 0;
    boolean hub;
    boolean visited = false;

    public Node() {
        hub = false;

    }

    public void setNbs(Node nb1, Node nb2) {
        connections.add(nb1);
        connections.add(nb2);
    }

    public boolean addExtraCon(Node con) {
        for (int i = 0; i < connections.size(); i++) {
            if(connections.get(i) == con) {
                return false;
            }
        }
        connections.add(con);
        return true;
    }

    public boolean makeHub() {
        hub = true;
        return hub;
    }

    public int numberOfConnections() {
        cons = connections.size();
        return cons;
    }

    public boolean isHub() {
        if (hub == true) {
            return true;
        }
        return false;
    }

}

これがすべての助けに役立つことを願っています。前もって感謝します。

4

0 に答える 0