目次
アルゴリズム
Example
出力
ホームページ バックエンド開発 C++ C プログラムでの CLRS アルゴリズムの実装に続いて、ベクターとキューを使用して BFS を実装する

C プログラムでの CLRS アルゴリズムの実装に続いて、ベクターとキューを使用して BFS を実装する

Sep 06, 2023 pm 04:37 PM
ベクター bfs (breadth-first search)

C プログラムでの CLRS アルゴリズムの実装に続いて、ベクターとキューを使用して BFS を実装する

CLRS の本では、BFS アルゴリズムがベクトルとキューを使用して説明されています。このアルゴリズムを実装するには C STL を使用する必要があります。まずはアルゴリズムを見てみましょう。

アルゴリズム

BFS(G, s) −

begin
   for each vertex u in G.V - {s}, do
      u.color := white
      u.d := infinity
      u.p := NIL
   done
   s.color := green
   s.d := 0
   s.p := NIL
   Q := NULL
   insert s into Q
   while Q is not null, do
      u = delete from Q
      for each v in adjacent to u, do
         if v.color = white
            v.color := green
            v.d := u.d + 1
            v.p := u
            insert v into Q
         end if
      done
      u.color = dark_green
   done
end
ログイン後にコピー

Example

の中国語訳は次のとおりです:

Example

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<string> colour;
vector<int> dist;
vector<int> par;
void addEdge(vector <int> g[], int u, int v) { //add edge to form the graph
   g[u].push_back(v);
   g[v].push_back(u);
}
void BFS(vector <int> g[], int s) {
   queue<int> q;
   q.push(s); //insert source
   dist[s] = 0;
   colour[s] = "gray";
   while (!q.empty()) {
      int u = q.front(); //top element from queue, then delete it
      q.pop();
      cout << u << " ";
      for (auto i = g[u].begin(); i != g[u].end(); i++) {
         if (colour[*i] == "white") { //white is unvisited node
            colour[*i] = "gray"; //gray is visited but not completed
            dist[*i] = dist[u] + 1;
            par[*i] = u;
            q.push(*i);
         }
      }
      colour[u] = "black"; //black is completed node
   }
}
void BFSAlgo(vector <int> g[], int n) {
   colour.assign(n, "white"); //put as unvisited
   dist.assign(n, 0);
   par.assign(n, -1);
   for (int i = 0; i < n; i++)
      if (colour[i] == "white")
   BFS(g, i);
}
int main() {
   int n = 7;
   vector <int> g[n];
   addEdge(g, 0, 1);
   addEdge(g, 0, 2);
   addEdge(g, 1, 3);
   addEdge(g, 1, 4);
   addEdge(g, 2, 5);
   addEdge(g, 2, 6);
   BFSAlgo(g, n);
}
ログイン後にコピー

出力

0 1 2 3 4 5 6
ログイン後にコピー

以上がC プログラムでの CLRS アルゴリズムの実装に続いて、ベクターとキューを使用して BFS を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravel 開発ノート: キャッシュとキューの適切な使用 Laravel 開発ノート: キャッシュとキューの適切な使用 Nov 22, 2023 am 11:46 AM

Laravel 開発ノート: キャッシュとキューの適切な使用

PHP および MySQL でのデッドレターキューと遅延キューのアプリケーション シナリオ PHP および MySQL でのデッドレターキューと遅延キューのアプリケーション シナリオ Oct 15, 2023 am 11:46 AM

PHP および MySQL でのデッドレターキューと遅延キューのアプリケーション シナリオ

PHP と MySQL でキュー メッセージ フィルタリングとメッセージ ルーティングを実装する方法 PHP と MySQL でキュー メッセージ フィルタリングとメッセージ ルーティングを実装する方法 Oct 15, 2023 pm 04:55 PM

PHP と MySQL でキュー メッセージ フィルタリングとメッセージ ルーティングを実装する方法

C プログラムでの CLRS アルゴリズムの実装に続いて、ベクターとキューを使用して BFS を実装する C プログラムでの CLRS アルゴリズムの実装に続いて、ベクターとキューを使用して BFS を実装する Sep 06, 2023 pm 04:37 PM

C プログラムでの CLRS アルゴリズムの実装に続いて、ベクターとキューを使用して BFS を実装する

PHP および MySQL でのキュー メッセージの永続化とメッセージの重複排除のアプリケーション シナリオ PHP および MySQL でのキュー メッセージの永続化とメッセージの重複排除のアプリケーション シナリオ Oct 15, 2023 pm 01:42 PM

PHP および MySQL でのキュー メッセージの永続化とメッセージの重複排除のアプリケーション シナリオ

C++ のスタックとキュー C++ のスタックとキュー Aug 22, 2023 am 11:00 AM

C++ のスタックとキュー

PHP および MySQL でキュー メッセージの蓄積と輻輳制御を処理する方法 PHP および MySQL でキュー メッセージの蓄積と輻輳制御を処理する方法 Oct 15, 2023 am 09:24 AM

PHP および MySQL でキュー メッセージの蓄積と輻輳制御を処理する方法

Javaでキューを使用してスタックを実装するにはどうすればよいですか? Javaでキューを使用してスタックを実装するにはどうすればよいですか? Aug 25, 2023 pm 05:05 PM

Javaでキューを使用してスタックを実装するにはどうすればよいですか?

See all articles