Heim >Backend-Entwicklung >C++ >Wie man den Algorithmus von Prim in C++ verwendet

Wie man den Algorithmus von Prim in C++ verwendet

PHPz
PHPzOriginal
2023-09-20 12:31:49731Durchsuche

Wie man den Algorithmus von Prim in C++ verwendet

Titel: Verwendung und Codebeispiele des Prim-Algorithmus in C++

Einführung: Der Prim-Algorithmus ist ein häufig verwendeter Minimum-Spanning-Tree-Algorithmus, der hauptsächlich zur Lösung des Minimum-Spanning-Tree-Problems in der Graphentheorie verwendet wird. In C++ kann der Algorithmus von Prim durch sinnvolle Datenstrukturen und Algorithmusimplementierung effektiv genutzt werden. In diesem Artikel wird die Verwendung des Prim-Algorithmus in C++ vorgestellt und spezifische Codebeispiele bereitgestellt.

1. Einführung in den Prim-Algorithmus
Der Prim-Algorithmus ist ein gieriger Algorithmus, der von einem Scheitelpunkt ausgeht und den Scheitelpunktsatz des minimalen Spannbaums schrittweise erweitert, bis alle Scheitelpunkte enthalten sind. Es erstellt einen minimalen Spannbaum, indem kontinuierlich die Kante mit dem geringsten Gewicht ausgewählt wird, die mit dem aktuellen Satz verbunden ist.

2. Implementierungsschritte des Prim-Algorithmus

  1. Erstellen Sie einen leeren minimalen Spanning Tree-Satz und eine Prioritätswarteschlange zum Speichern von Kantengewichten und verbundenen Scheitelpunkten.
  2. Wählen Sie zufällig einen Scheitelpunkt als Startscheitelpunkt aus und fügen Sie ihn dem minimalen Spannbaumsatz hinzu.
  3. Fügen Sie die mit dem Startscheitelpunkt verbundene Kante zur Prioritätswarteschlange hinzu.
  4. Wiederholen Sie die folgenden Schritte, bis der minimale Spannbaum alle Eckpunkte enthält:
    a. Entfernen Sie die Kante mit dem kleinsten Gewicht und die verbundenen Eckpunkte aus der Prioritätswarteschlange.
    b. Wenn sich der Scheitelpunkt bereits im minimalen Spannbaumsatz befindet, ignorieren Sie die Kante.
    c. Andernfalls fügen Sie den Scheitelpunkt zum minimalen Spannbaumsatz hinzu und fügen Sie die mit dem Scheitelpunkt verbundenen Kanten zur Prioritätswarteschlange hinzu.
  5. Geben Sie den minimalen Spanning Tree-Satz aus.

3. C++-Codebeispiel
Das Folgende ist ein Codebeispiel mit C++ zur Implementierung des Prim-Algorithmus, der eine Adjazenzmatrix zur Darstellung des Diagramms verwendet:

#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;

const int MAX = 100;
const int INF = 9999;

vector<vector<int>> graph(MAX, vector<int>(MAX, INF));

void prim(int start, int n)
{
    vector<int> key(n, INF);  // 存储每个顶点到最小生成树的最小权重
    vector<bool> visited(n, false);  // 标记顶点是否已经加入最小生成树
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;  // 优先队列,按权重升序排列

    key[start] = 0;  // 起始顶点到自身的权重置为0
    pq.push(make_pair(0, start));

    while (!pq.empty())
    {
        int u = pq.top().second;
        pq.pop();

        visited[u] = true;

        for (int v = 0; v < n; v++)
        {
            if (graph[u][v] != INF && !visited[v] && graph[u][v] < key[v])
            {
                key[v] = graph[u][v];
                pq.push(make_pair(graph[u][v], v));
            }
        }
    }

    // 输出最小生成树的边
    for (int i = 1; i < n; i++)
    {
        cout << "Edge: " << i << " - " << key[i] << endl;
    }
}

int main()
{
    int n, e;
    cout << "Enter the number of vertices: ";
    cin >> n;
    cout << "Enter the number of edges: ";
    cin >> e;

    cout << "Enter the edges and weights: " << endl;
    int u, v, w;
    for (int i = 0; i < e; i++)
    {
        cin >> u >> v >> w;
        graph[u][v] = w;
        graph[v][u] = w;
    }

    int start;
    cout << "Enter the starting vertex: ";
    cin >> start;

    cout << "Minimum Spanning Tree edges: " << endl;
    prim(start, n);

    return 0;
}

Dieser Artikel stellt vor, wie man den Prim-Algorithmus in C++ verwendet. und bietet ein detailliertes Beispiel für einen Absatzcode. Minimale Spannbäume können durch die Verwendung geeigneter Datenstrukturen und Algorithmusimplementierungen effizient berechnet werden. Ich hoffe, dieser Artikel wird Ihnen bei der Verwendung des Prim-Algorithmus zur Lösung des Minimum-Spanning-Tree-Problems hilfreich sein.

Das obige ist der detaillierte Inhalt vonWie man den Algorithmus von Prim in C++ verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn