Java реализует взвешенный граф?
Я написал свой код, но не знаю, как получить доступ к весу графика или как распечатать его ребра в основном методе, пожалуйста, посмотрите на мой код. Пожалуйста, помогите, на самом деле я пытаюсь реализовать Дейкстру, но я не знаю, является ли это правильным способом включения веса в график или нет. Пожалуйста, помогите решить эту проблему за последние три дня.
public class Gr {
public class Node{
public int vertex;
public int weight ;
public int getVertex() {return vertex;}
public int getWeight() {return weight;}
public Node(int v , int w){
vertex=v;
weight=w;
}
}
private int numVertices=1 ;
private int numEdges=0 ;
private Map<Integer,ArrayList<Node>> adjListsMap= new HashMap<>();
public int getNumVertices(){
return numVertices;
}
public int addVertex(){
int v = getNumVertices();
ArrayList<Node> neighbors = new ArrayList<>();
adjListsMap.put(v,neighbors);
numVertices++ ;
return (numVertices-1);
}
//adding edge
public void addEdge(int u , int v,int w ){
numEdges++ ;
if(v<numVertices&&u<numVertices){
(adjListsMap.get(u)).add( new Node(u,w));
(adjListsMap.get(v)).add(new Node(u,w));
}
else {
throw new IndexOutOfBoundsException();
}
}
//getting neighbours
public List<Node> getNeighbors(int v ){
return new ArrayList<>(adjListsMap.get(v));
}
public static void main(String[] args){
Gr g = new Gr();
for(int j=1;j<=3;j++)
g.addVertex();
for(int k =1;k<=2;k++)
{ int u= in.nextInt();
int v = in.nextInt();
int w = in.nextInt();
g.addEdge(u,v,w);
}
}
}
1 ответ
Первое примечание: какправило, Node
это вершина и Edge
это преимущество Названия, которые вы приняли, могут привести к путанице.
Ответ: это хорошая практика для использования Node
а также Edge
, если вы представляете свой график в виде списка смежности. Если это так, то Node
имеет label
и список Edge
s. Edge
имеет какую-то ссылку (в моем примере, ссылку на объект Node) на место назначения Node
и weight
,
Пример кода:
Node.java
public class Node {
private String label;
private List<Edge> edges;
}
Edge.java
public class Edge {
private Node destination;
private double weight;
}
Пример использования
public class Main {
public static void main(String[] args) {
// creating the graph A --1.0--> B
Node n = new Node();
n.setLabel("A");
Node b = new Node();
b.setLabel("B");
Edge e = new Edge();
e.setDestination(b);
e.setWeight(1.0);
n.addEdge(e);
// returns the destination Node of the first Edge
a.getEdges().get(0).getDestination();
// returns the weight of the first Edge
a.getEdges().get(0).getWeight();
}
}