好的,所以我制作了这张图,该图我一直在执行以下搜索算法:
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;
}
如何在考虑加权边的情况下遍历图形?