хорошо, поэтому я создал этот график, на котором я реализовывал поисковые алгоритмы:
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;
}
Как я могу пройти мой граф с учетом взвешенных ребер?