C++笔记-基于邻接表的BFS(宽度优先遍历)

Posted IT1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++笔记-基于邻接表的BFS(宽度优先遍历)相关的知识,希望对你有一定的参考价值。

这里是基于邻接表的,有向的,具体代码如下:

#include <iostream>
#include <list>

using namespace std;


class Graph
{
	int V;


	list<int> *adj;
public:
	Graph(int V);


	void addEdge(int v, int w);


	void BFS(int s);
};

Graph::Graph(int V)
{
	this->V = V;
	adj = new list<int>[V];
}

void Graph::addEdge(int v, int w)
{
	adj[v].push_back(w);
}

void Graph::BFS(int s)
{

	bool *visited = new bool[V];
	for (int i = 0; i < V; i++)
		visited[i] = false;


	list<int> queue;


	visited[s] = true;
	queue.push_back(s);


	list<int>::iterator i;

	while (!queue.empty())
	{

		s = queue.front();
		cout << s << " ";
		queue.pop_front();


		for (i = adj[s].begin(); i != adj[s].end(); ++i)
		{
			if (!visited[*i])
			{
				visited[*i] = true;
				queue.push_back(*i);
			}
		}
	}
}


int main()
{

	Graph g(4);
	g.addEdge(0, 1);
	g.addEdge(1, 2);
	g.addEdge(0, 3);
	
	cout << "Following is Breadth First Traversal " << endl;
	g.BFS(0);

	getchar();
	return 0;
}

程序运行截图如下:

这里的g.BFS(0);代表,从0这个顶点开始。

邻接表是这样的:

以上是关于C++笔记-基于邻接表的BFS(宽度优先遍历)的主要内容,如果未能解决你的问题,请参考以下文章

C++笔记-二维棋盘数组使用BFS(宽度优先遍历)

SDUT 2142 TEST数据结构实验之图论二:基于邻接表的广度优先搜索遍历

用广度优先遍历能将邻接表转化成逆邻接表吗

图的深度优先遍历DFS和广度优先遍历BFS(邻接矩阵存储)超详细完整代码进阶版

用c语言编程 1创建图的邻接矩阵和邻接表 2验证图的深度优先、广度优先遍历算法 3验证最短路径

《图论》——广度优先遍历算法(BFS)