ホームページ バックエンド開発 C++ C++ で Prim のアルゴリズムを使用する方法

C++ で Prim のアルゴリズムを使用する方法

Sep 20, 2023 pm 12:31 PM
最小スパニングツリー 写真 プリムアルゴリズム

C++ で Prim のアルゴリズムを使用する方法

タイトル: C での Prim アルゴリズムの使用とコード例

はじめに: Prim アルゴリズムは、一般的に使用される最小スパニング ツリー アルゴリズムであり、主にグラフ理論の問題を解決するために使用されます。スパニングツリーの問題。 C では、適切なデータ構造とアルゴリズムの実装により、Prim のアルゴリズムを効果的に使用できます。この記事では、C で Prim のアルゴリズムを使用する方法と、具体的なコード例を紹介します。

1. Prim アルゴリズムの概要
Prim アルゴリズムは、頂点から開始して、すべての頂点が含まれるまで最小スパニング ツリーの頂点セットを徐々に拡張する貪欲なアルゴリズムです。現在のセットに接続されている最小の重みを持つエッジを継続的に選択することにより、最小スパニング ツリーを構築します。

2. プリム アルゴリズムの実装手順

  1. 空の最小スパニング ツリー セットと優先キューを作成して、エッジの重みと接続された頂点を保存します。
  2. 頂点を開始頂点としてランダムに選択し、それを最小スパニング ツリー セットに追加します。
  3. 開始頂点に接続されているエッジを優先キューに追加します。
  4. 最小スパニング ツリーにすべての頂点が含まれるまで、次の手順を繰り返します:
    a. 重みが最小のエッジと接続されている頂点を優先キューから削除します。
    b. 頂点がすでに最小スパニング ツリー セットに含まれている場合は、エッジを無視します。
    c. それ以外の場合は、頂点を最小スパニング ツリー セットに追加し、頂点に接続されているエッジを優先キューに追加します。
  5. 最小スパニングツリーセットを出力します。

3. C コード例
次は、C を使用して Prim のアルゴリズムを実装するコード例であり、隣接行列を使用してグラフを表します:

#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;
}
ログイン後にコピー

4.
この記事では、C で Prim のアルゴリズムを使用する方法を紹介し、具体的なコード例を示します。最小スパニング ツリーは、適切なデータ構造とアルゴリズム実装を使用することで効率的に計算できます。この記事が、Prim のアルゴリズムを使用して最小スパニング ツリー問題を解決する際に役立つことを願っています。

以上がC++ で Prim のアルゴリズムを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C++ で Prim のアルゴリズムを使用する方法 C++ で Prim のアルゴリズムを使用する方法 Sep 20, 2023 pm 12:31 PM

タイトル: C++ での Prim アルゴリズムの使用とコード例 はじめに: Prim アルゴリズムは、一般的に使用される最小スパニング ツリー アルゴリズムであり、主にグラフ理論の最小スパニング ツリー問題を解決するために使用されます。 C++ では、合理的なデータ構造とアルゴリズムの実装を通じて、Prim のアルゴリズムを効果的に使用できます。この記事では、C++ で Prim のアルゴリズムを使用する方法を紹介し、具体的なコード例を示します。 1. Prim アルゴリズムの概要 Prim アルゴリズムは貪欲なアルゴリズムであり、頂点から開始し、最小スパニング ツリーの頂点セットを徐々に拡張していきます。

最小スパニング ツリー用の C++ の Boruvka アルゴリズム 最小スパニング ツリー用の C++ の Boruvka アルゴリズム Aug 27, 2023 pm 02:53 PM

グラフ理論では、接続された重み付きグラフの最小スパニング ツリー (MST) を見つけることが一般的な問題です。 MST は、すべての頂点を接続し、合計エッジの重みを最小化するグラフ エッジのサブセットです。この問題を解決する効率的なアルゴリズムが Boruvka アルゴリズムです。構文 structEdge{intsrc,dest,weight;};//union-findstructSubset{intparent,rank;};のサブセットを表す構造を定義します。 次に、Boruvka アルゴリズムで最小スパニング ツリーを見つける手順の概要を説明します。 MST を空のセットとして初期化します。 。頂点ごとに

PPT で 2 つの写真を同時にアニメーション化するように設定する方法 PPT で 2 つの写真を同時にアニメーション化するように設定する方法 Mar 26, 2024 pm 08:40 PM

1. ダブルクリックしてテスト ドキュメントを開きます。 2. ジョブをクリックして最初の ppt 文書を作成した後、メニューで「挿入」--「図」-「ファイルから」をクリックします。 3. 挿入したファイルを選択し、「挿入」をクリックします。 4. 同様にもう 1 枚の写真を挿入し、2 つの写真をドラッグして適切な位置に調整します。 5. 同時に 2 つの画像を選択し、右クリック - [グループ] - [グループ] をクリックすると、2 つの画像が 1 つになります。 6. 結合されたグラフィックを選択し、右クリックして [アニメーションのカスタマイズ] を選択します。 7. [効果の追加] をクリックし、効果を選択して [OK] をクリックします。PPT を見ると、2 つの画像が一緒に動いていることがわかります。

Javaを使用してグラフトポロジーソートアルゴリズムを実装する方法 Javaを使用してグラフトポロジーソートアルゴリズムを実装する方法 Sep 19, 2023 pm 03:19 PM

Java を使用してグラフのトポロジカル ソート アルゴリズムを実装する方法 はじめに: グラフは非常に一般的なデータ構造であり、コンピューター サイエンスの分野で幅広い用途があります。トポロジカル ソート アルゴリズムは、有向非巡回グラフ (DAG) をソートしてグラフ内のノード間の依存関係を判断できる、グラフ理論の古典的なアルゴリズムです。この記事では、Java プログラミング言語を使用してグラフのトポロジカル ソート アルゴリズムを実装する方法を、具体的な Java コード例とともに紹介します。 1. グラフのデータ構造を定義する トポロジカルソートアルゴリズムを実装する前に、まず次のことを定義する必要があります。

Java を使用してグラフのハミルトニアン サイクル アルゴリズムを実装する方法 Java を使用してグラフのハミルトニアン サイクル アルゴリズムを実装する方法 Sep 21, 2023 am 09:03 AM

Java を使用してグラフのハミルトニアン サイクル アルゴリズムを実装する方法 ハミルトニアン サイクルは、グラフ理論の計算問題であり、特定のグラフ内のすべての頂点を含む閉じたパスを見つけることです。この記事では、Java プログラミング言語を使用してハミルトニアン サイクル アルゴリズムを実装する方法と、対応するコード例を詳しく紹介します。グラフ表現 まず、適切なデータ構造を使用してグラフを表現する必要があります。 Java では、隣接行列または隣接リンク リストを使用してグラフを表現できます。ここでは、グラフを表すために隣接行列を使用することを選択します。というファイルを定義します。

PHP で最小スパニング ツリー問題の最適解を達成するために貪欲アルゴリズムを使用するにはどうすればよいですか? PHP で最小スパニング ツリー問題の最適解を達成するために貪欲アルゴリズムを使用するにはどうすればよいですか? Sep 19, 2023 pm 06:33 PM

PHP で最小スパニング ツリー問題の最適解を達成するために貪欲アルゴリズムを使用する方法は?最小スパニング ツリー (MinimumSpanningTree) 問題は、接続された無向グラフ内で、このサブツリーにグラフ内のすべての頂点が含まれ、すべてのエッジの重みの合計が最小となるサブツリーを見つけることです。貪欲アルゴリズムは、この問題を解決するための一般的な手法の 1 つであり、毎回現在の最適解を選択することで、全体的な最適解を徐々に見つけます。まず、グラフの構造とエッジの重みを保存するグラフ クラスを定義する必要があります。以下はその例です

Java を使用してグラフの強接続コンポーネント アルゴリズムを実装する方法 Java を使用してグラフの強接続コンポーネント アルゴリズムを実装する方法 Sep 21, 2023 am 11:09 AM

Java を使用してグラフの強接続コンポーネント アルゴリズムを実装する方法 はじめに: グラフはコンピュータ サイエンスで一般的に使用されるデータ構造であり、多くの実際的な問題の解決に役立ちます。グラフにおいて、接続コンポーネントとは、相互に到達可能なパスを持つグラフ内の頂点のセットを指します。強く接続されたコンポーネントとは、有向グラフ内の任意の 2 つの頂点間に双方向のパスが存在することを意味します。この記事では、読者がグラフの接続性をよりよく理解できるように、Java を使用してグラフの強接続コンポーネント アルゴリズムを実装する方法を紹介します。 1. グラフ表現 Java では、隣接行列または隣接関係を使用できます。

Java におけるツリーとグラフの非線形データ構造のアプリケーションと実装方法の詳細な調査 Java におけるツリーとグラフの非線形データ構造のアプリケーションと実装方法の詳細な調査 Dec 26, 2023 am 10:22 AM

Java のツリーとグラフの理解: 非線形データ構造のアプリケーションと実装の探索 はじめに コンピューター サイエンスでは、データ構造はコンピューター内でデータを保存、編成、管理する方法です。データ構造は、線形データ構造と非線形データ構造に分類できます。ツリーとグラフは、最も一般的に使用される 2 つのタイプの非線形データ構造です。この記事では、Java におけるツリーとグラフの概念、アプリケーション、実装に焦点を当て、具体的なコード例を示します。ツリーの概念と応用 ツリーは抽象データ型であり、ノードとエッジの集合です。ツリーの各ノードには番号が含まれています

See all articles