Как я могу пройти этот график с учетом веса ребер? - PullRequest
0 голосов
/ 03 октября 2018

хорошо, поэтому я создал этот график, на котором я реализовывал поисковые алгоритмы:

    class Graph{
class Edge implements Comparable<Edge>{
    int u,v,w;
    public Edge(int u,int v,int w){
        this.u=u;
        this.v=v;
        this.w=w;
    }
    @Override
    public String toString(){
        return "("+u+","+v+","+w+")";
    }
    /** Compare two edges on weights */
    @Override
    public int compareTo(Edge edge) {
        if (this.w > edge.w) {
            return 1;
        }
        else if (this.w == edge.w) {
            return 0;
        }
        else {
            return -1;
        }
    }
}
List<String> vertices = new ArrayList<>(); // Store vertices names
List<List<Edge>> neighbors = new ArrayList<>(); // Adjacency lists

И до сих пор я мог довольно просто обойти его, назначив каждой строке индекс и используяэтот индекс, чтобы получить все его соседи.Я использовал целые числа только для доступа к вершинам и ребрам.Моя проблема сейчас заключается в том, что мне нужно запрограммировать поиск с одинаковой стоимостью, но я не уверен, как пройти через мои списки, учитывая вес ребер.Я действительно не рассматривал края как края больше как индексы.Например, допустим, я хочу, чтобы соседи вершины номер 5. Я бы вызвал следующую функцию, чтобы получить их:

        /** Return the neighbors of the specified vertex */
public List<Integer> getNeighbors(int index) {

    List<Integer> result = new ArrayList<>();
    for (Edge e: neighbors.get(index))
        result.add(e.v);

    return result;
}

Как я могу пройти мой граф с учетом взвешенных ребер?

...