C ++深さ優先探索グラフ隣接行列ストレージ

それぞれ、図3の方法、隣接行列、及び隣接テーブルエッジ集合、一般的に使用される最初の二つのメインメモリのデータ構造においては、以下のC ++言語及び図隣接行列記憶に使用される深さ優先探索トラバーサルを実装

2.以下は、特定の実装プロセスであります:

深さ優先トラバーサル隣接行列記憶マップは比較的単純であるため①、電流のみ頂点が現在の頂点と他の存在で開始頂点のグラフから隣人を見つけるためにアクセスされたかどうかをマークするタグの配列を使用する必要が連絡先の頂点は、各頂点は、マークされた頂点が訪問された訪問しました

現在の隣人と隣接し、現在の出発点からは、現在のポイントの近隣諸国との関係を探し続け見つける②の後、最終的フィギュアDFS検索は全ての頂点が訪問されましたので終了します

図の例を次のように

次のようにテストデータは以下のとおりです。

6
7
0 1 1
0 2 2
0 3 4
1 2 5
2 4 9
2 5 6
4 5 2

3.次の特定のコードです。

#include<stdio.h>
#include<iostream>
#include<queue>
#include<algorithm>
#define maxSize 100
#define INF 100000
using namespace std;
bool vis[maxSize] = {false}; 
int n, edges, G[maxSize][maxSize];
void dfs(int u){
	vis[u] = true;
	cout << u << " ";
	for(int v = 0; v < n; v++){
		if(vis[v] == false && G[u][v] != INF){
			dfs(v);	
		}
	}
}

int main(void){
	cout << "输入图中的顶点数: ";
	cin >> n;
	fill (G[0], G[0] + maxSize * maxSize, INF);
	cout << endl;
	cout << "输入图中的边数: ";
	cin >> edges;
	cout << endl << "输入图中的起始顶点, 结束顶点和边的权重: " << endl;
	int u = -1, v = -1, weight = -1;
	for(int i = 0; i < edges; i++){
		cin >> u >> v >> weight;
		G[u][v] = weight;
	}
	for(int i = 0; i < n; i++){
		if(vis[i] == false){
			dfs(0);
		}
	}
	return 0;
} 

 

おすすめ

転載: blog.csdn.net/qq_39445165/article/details/93188994