Ich bin neu in der Programmierung und versuche, Datenstrukturen selbst zu lernen. Ich versuche, eine nicht gewichtete Graphklasse mit Adjazenzlisten zu implementieren, aber ich habe Probleme beim Implementieren der Methode getAdjacentVertices und ich weiß nicht genau, wie die addEdge-Methode wirklich funktioniert, speziell wie die Methode insertAtTheBeginning implementiert wird. Bitte helfen Sie mir, das Buch ich verwende wirklich nicht über diese Themen erklärt. *Ungewichtete Graphen mit Adjazenzlisten
enter code here
public class Graph {
private ArrayList<Integer> vertices;
private ListNode[] edges;
private int vertexCount = 0;
public Graph(int vertexCount){
this.vertexCount = vertexCount;
vertices = new ArrayList<Integer>();
edges = new ListNode[vertexCount];
for(int i = 0; i < vertexCount; i++){
vertices.add(i);
edges[i] = new ListNode();
}
}
public void addEdge(int source, int destination){
int i = vertices.indexOf(source);
int j = vertices.indexOf(destination);
if(i != -1 || j != -1){
edges[i].insertAtBeginning(destination);
edges[j].insertAtBeginning(source);
}
}
public int getNumberVertices() {
return vertexCount;
}
public Object getAdjacentVertices(int currentVertex) {
}
}
Danke C.Francu das ist jetzt klarer. Außer dass es ein gerichteter Graph sein soll. Etwas wie: A: B-> D; B: D-> E ... Wie würde dies mit einem Array dargestellt werden, wo jeder Index (Scheitelpunkt) mit einer verknüpften Liste verbunden ist, die die Kanten enthält, an die der Scheitelpunkt angrenzt .... Jede Hilfe wird wirklich geschätzt – Charizard
Ah, OK dann. Ich wurde von der Tatsache verworfen, dass Ihr ursprünglicher Code jede Kante '(Quelle, Ziel)' zu den Adjazenzlisten beider Knoten hinzugefügt hat. Wenn das Diagramm gerichtet ist, müssen Sie in 'addEdge()' nur die erste Addition aufrufen. Also rufst du 'cores.get (u) .add (v);', aber nicht 'cores.get (v) .add (u);'. –