Я пытаюсь получить лучший путь от взвешенного графика, где в моем случае рассматриваются набор из трех различных весов, которые включают стоимость, медлительность и риск. Одна из целей состоит в том, чтобы представить карту, где каждый край является дорогой, а каждая вершина - координатной точкой. Я использую Map <Vertex, HashSet<ConnectionEdge> map;
для представления моего графика. Класс ConnectionEdge
представляет пакет с целевой вершиной и соответствующим весом этого соединения (origin -> (destination, weight)). Для нахождения наилучшего пути считается сумма среднего значения одной вершины до другой, пока не будет найден пункт назначения, то есть из одной вершины в другую мы добавляем веса (стоимость, медлительность, риск) и делим на три. возьмите этот результат, и мы добавим следующий к следующему.
Я могу установить связи, но у меня проблемы с поиском лучшего способа. Основная цель состоит в том, чтобы напечатать лучший путь как A -> B -> D -> E
в соответствии с его общим значением веса (сумма средних значений).
Ниже код класса:
Graph.java
import java.util.*;
public class Graph<T> {
private Map<Vertex, HashSet<ConnectionEdge>> map;
public Graph() {
this.map = new HashMap<Vertex, HashSet<ConnectionEdge>>();
}
public boolean add(Vertex<T> vextex) {
if (!this.map.containsKey(vextex)) {
this.map.put(vextex, new HashSet<ConnectionEdge>());
return true;
}
return false;
}
public boolean put(Vertex<T> origin, Vertex<T> destination, int cost, int slowness, int risk) {
if (this.map.containsKey(origin) && this.map.containsKey(destination)) {
if (!this.map.get(origin).contains(destination)) {
List<Integer> weights = Arrays.asList(cost, slowness, risk);
this.map.get(origin).add(new ConnectionEdge(destination, weights));
return true;
}
}
return false;
}
}
Vertex.java
public class Vertex<T> {
private String label;
private T value;
public Vertex(String label) {
this.label = label;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
ConnectionEdge.java
import java.util.List;
public class ConnectionEdge<T> {
private Vertex<T> destination;
private List<Weight> weights;
public ConnectionEdge(Vertex<T> destination, List<Weight> pesos) {
this.destination = destination;
this.weights = pesos;
}
public Vertex<T> getDestination() {
return destination;
}
public void setDestination(Vertex<T> destination) {
this.destination = destination;
}
public List<Weight> getWeights() {
return weights;
}
public void setWeights(List<Weight> weights) {
this.weights = weights;
}
}
Weight.java
import java.util.HashMap;
import java.util.Map;
public class Weight {
private Map<WeightType, Integer> weights = new HashMap<WeightType, Integer>();
public Weight(WeightType weightType, Integer value) {
this.weights.put(weightType, value);
}
public Map<WeightType, Integer> getWeights() {
return weights;
}
public void setWeights(Map<WeightType, Integer> weights) {
this.weights = weights;
}
}
WeightType.java
public enum WeightType {
COST,
SLOWNESS,
RISK
}
Это помогло бы многим указаниям или решению.