伪代码
//遍历u所在的连通块
BFS(u)
{
queue q;
将u入队
visq[u] = true;
while(q非空)
{
取出队首元素进行访问;
for (遍历与u相连的所有顶v) {
if visq[v] == false;
{
v入队
visq[v] = true;
}
}
}
}
BFSTravel(G)
{
for(G的所有顶点u)
if visq[u]=false;
BFS(u);
}
邻接矩阵
int n,G[MAXV][MAXV];
bool visq[MAXV];
//遍历u所在的连通块
void BFS(int u)
{
queue<int> q;
q.push(u);
visq[u] = true;
while(!q.empty())
{
int p= q.front();
q.pop();
for (int v = 0 v < n;v++) {
if (visq[v] == false && G[p][v]!=INF)
{
q.push(v);
visq[v] = true;
}
}
}
}
void BFSTravel(int G[][MAXV])
{
for(int u = 0;u<n;u++)
{
if(visq[u]=false)
BFS(u);
}
}
邻接表版
int n;
vector<int> Adj[MAXV];
bool visq[MAXV];
//遍历u所在的连通块
void BFS(int u)
{
queue<int> q;
q.push(u);
visq[u] = true;
while(!q.empty())
{
int p = q.front();
q.pop();
for (int i = 0 ;i < Adj[u].size();i++) {
int v = Adj[u][i];
if (visq[v] == false)
{
q.push(v);
visq[v] = true;
}
}
}
}
void BFSTravel(int G[][MAXV])
{
for(int u = 0;u<n;u++)
{
if(visq[u]=false)
BFS(u);
}
}
很多情况下都会让求深度,这种情况下定义一个结构体
struct Node{
int v;//顶点编号
int layer;//顶点层数
};
在相应的的代码中将int 修改为node就行