vector,list實現圖的鄰接表 DFS遍歷

圖的實現

圖的實現有兩種方法,一種是鄰接矩陣,另一種是鄰接表,這兩種實現各有各的優缺點,以下給出了鄰接表的實現並且DFS遍歷的代碼實現。

舉例

在這裏插入圖片描述

// A simple representation of graph using STL
#include<iostream>
#include<vector>
#include<list>
using namespace std;

// A utility function to add an edge in an
// undirected graph.
void addEdge(vector<list<int> >& adj,int i, int j)
{
	adj[i].push_back(j);
	adj[j].push_back(i);
}

// A utility function to print the adjacency list
// representation of graph
void printGraph(vector<list<int> >& adj, int V)
{
	for (int i = 0; i < V; ++i)
	{
		cout << "Adjacency list of vertex " << i << endl;
		
		for (auto j = adj[i].begin(); j != adj[i].end(); j++)
			cout << *j << " ";
		cout << endl;
	}
}

void DFS(vector<list<int> > &adj,int i,bool visited[])
{
	visited[i] = true;
	cout << i << " ";
	for (auto j = adj[i].begin(); j != adj[i].end(); j++)
	{
		if (!visited[*j])
			DFS(adj, *j, visited);
	}
}

void DFStraverse(vector<list<int> > &adj)
{
	bool* visited = new bool[V];
	for (int i = 0; i < V; i++)
		visited[i] = false;

	for (int i = 0; i < V; i++)
	{
		if (!visited[i])
			DFS(adj,i,visited);
	}
}

// Driver code
int main()
{	
	int V = 4;
	vector<list<int> > adj(4);

	addEdge(adj, 0, 1);
	addEdge(adj, 0, 2);
	addEdge(adj, 1, 2);
	addEdge(adj, 2, 3);
	printGraph(adj,V);
	DFStraverse(adj);
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章