Anfang: $v_{1}$ als besucht markieren/zum MST hinzufügen
Pro Iteration:

  • Immer minimale ausgehende Kante aus der ganzen Zusammenhangskante, die nicht in zu einem anderen Knoten in der ZHK zeigt, hinzufügen., also:
    • Alle anliegenden Kanten zu den “besucht” markierten Knoten anschauen, die zu einem Knoten führen, der nicht im MST ist.
    • Minimum dieser Kanten auswählen und Knoten als besucht markieren/zum MST hinzufügen

Laufzeit $O((|V|+|E|)\cdot \log(|V|))$

→ vgl. Dijkstra, statt nach Entfernung zu Startknoten zu arbeiten, wird mit Schnittprinzip ausgewählt

Pseudocode

Java
Prim(G, s):                // s is the starting vertex, G = (V, E, c)
    P = PriorityQueue(V)   // all vertices initially have priority = ∞
    decreaseKey(P, s, 0)

    while not isEmpty(P):
        u = extractMin(P)
        mark u as visited

        for each (u, v) in E with v not visited:
            decreaseKey(P, v, min(currentKey(P, v), c(u, v)))