Wann ist eine Eulertour in einem Graphen möglich?
Wenn maximal zwei Knoten eines Graphen einen ungeraden Grad haben.
Was sind Vor- und Nachteile einer Graphenmodellierung mit Adjazenzlisten?
+ Sie belegen nur soviel Speicherplatz wie nötig
- Beim Suchen muss man ggf. erst eine lange Kartenliste durchlaufen
+ Der Graph kann dynamisch ergänzt werden
Was sind Vor- und Nachteile einer Graphenmodellierung mit Adjazenzmatrizen?
+ Es lässt sich schnell prüfen, ob eine Kante vorhanden ist
Wann bietet sich eine Adjazenzliste an?
Bei dünnen Graphen mit wenigen Kanten
Wann bietet sich eine Adjazenzmatrix an?
Bei dichten Graphen mit vielen Kanten
Wie läuft die Tiefensuche in einem Graphen ab?
Wie läuft die Breitensuche in einem Graphen ab?
Wann lohnt sich eine Tiefensuche in einem Graphen?
Wenn der zu findende Knoten weit von dem Startknoten entfernt zu erwarten ist.
Wann lohnt sich eine Breitensuche in einem Graphen?
Wenn der zu findende Knoten nah an dem Startknoten zu erwarten ist.
Wie läuft die Suche nach einem Weg von einem zu einem anderen Knoten ab, mithilfe der Tiefensuche und des Backtrackings ab?
private boolean sucheWeg(Vertex start, Vertex ziel, List pWeg)
{
//Vertices überschreiben, Startknoten der Wegliste hinzufügen und markieren, Wegliste Access geben
Vertex s = g.getVertex(start.getID());
Vertex z = g.getVertex(ziel.getID());
pWeg.append(s);
s.setMark(true);
pWeg.toFirst();
//Überprüfen, ob der Zielknoten schon gefunden wurde
if(!s.getID().equals(z.getID())){ //Falls nicht: Nachbarn des Startknoten in eine Nachabrliste packen und dieser Access geben List n = g.getNeighbours(s); n.toFirst();
//Jeden Nachbarn aus der Liste abklappern und ab dort mit der Methode weitersuchen, falls derjenige nicht markiert ist
while(n.hasAccess()){
if(!n.getContent().isMarked()){
return sucheWeg(n.getContent(), z, pWeg);
}
n.next();
} //Backtracke, nachdem alle Nachabarn durchsucht wurden
pWeg.toLast();
pWeg.remove();
return false;
}
//Füge den Weg der globalen Wegliste hinzu und breche den Vorgang this.weg.concat(pWeg); return true; }
Was ist die Grundidee vom Dijkstra-Algorithmus?
Man verfolgt immer den kürzesten Weg zum nächsten Knotenpunkt und geht dann von dort aus weiter.
Wie läuft der Dijkstra-Algorithmus ab?
Was ist ein gerichteter Graph?
Die Richtung der Kanten ist vorgegeben.
Wenn man in beide Richtungen gehen möchte, sind zwei Kanten nötig.
Was ist ein ungerrichteter Graph
Die Richtung der Kanten ist nicht vorgegeben, man kann also auf eine Kante in beide Richtungen gehen. Den einzelnen Kanten werden Gewichte zugeschrieben.
Wann ist ein ungerichteter Graph zusammenhängend?
Wenn jeder Knoten erreichbar ist, sonst gibt es einzelne Knotengruppen
Wann ist ein gerichteter Graph zusammenhängend?
Er ist schwach zusammenhängend, wenn er als ungerichteter Graph zusammenhängend wäre.
Er ist stark zusammenhängend von einem Knoten v aus, wenn es vom Knoten v aus einen gerichteten Weg zu allen anderen Knoten gibt.
Er ist stark zusammenhängend, wenn es von jedem Knoten aus einen gerichteten Weg zu jeden anderen Knoten gibt.
Er ist nicht zusammenhängend, wenn es einzelne Knotengruppen gibt.