Sie haben Recht, dass die beiden Algorithmen von Dijkstra (kürzeste Wege von einem einzelnen Startknoten) und Prim (minimales Gewicht über Baum ab einem bestimmten Knoten) eine sehr ähnliche Struktur haben. Sie sind beide gierig (nehmen aus heutiger Sicht die beste Kante) und bauen einen Baum, der sich über den Graphen erstreckt.
Der von ihnen minimierte Wert ist jedoch unterschiedlich. Dijkstra wählt als nächste Kante diejenige aus, die vom Baum zu einem Knoten führt, der dem Startknoten noch nicht am nächsten liegt. (Dann werden mit dieser Auswahl die Entfernungen neu berechnet.) Prim wählt als Kante die kürzeste, die aus dem bisher konstruierten Baum herausführt. Daher wählten beide Algorithmen eine "minimale Kante". Der Hauptunterschied ist der als minimal gewählte Wert. Für Dijkstra ist es die Länge des vollständigen Pfades vom Startknoten zum Kandidatenknoten, für Prim ist es nur das Gewicht dieser einzelnen Kante.
Um den Unterschied zu erkennen, sollten Sie versuchen, einige Beispiele zu konstruieren, um zu sehen, was passiert. Das ist wirklich lehrreich. Das einfachste Beispiel, das ein anderes Verhalten zeigt, ist ein Dreieck mit Kanten und der Länge 2, während die Länge 1 hat Dijkstra wählt und (gibt zwei Pfade der Länge 2 an), während Prim und auswählt (gibt den Spanning Tree von Gewicht 3).x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}
Bei Kruskal ist das etwas anders. Es löst den minimalen Spannbaum, wählt aber während der Ausführung eine Kante, die möglicherweise keinen Baum bildet, und vermeidet lediglich Zyklen. So können die Teillösungen getrennt werden. Am Ende bekommst du einen Baum.