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;
}

发布了83 篇原创文章 · 获赞 18 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Abudula__/article/details/91459688