std::list <int> q;
std::vector<bool> visited(cols + 1);
for(int i = 1; i <= cols; i++) visited[i] = false;
visited[x] = true;
if(!l[x].empty())
{
for(std::list<int>::iterator i = l[x].begin(); i != l[x].end(); i++)
{
q.push_back(x); q.push_back(* i);
}
while(!q.empty())
{
y = q.back(); q.pop_back();
x = q.back(); q.pop_back();
if(!visited[y])
{
visited[y] = true;
if(!l[y].empty())
for(std::list<int>::iterator i = l[y].begin(); i != l[y].end(); i++)
{
if(!visited[*i])
{q.push_back(y); q.push_back(* i);}
}
dfst[x].push_back(y);
if(flag != 0) dfst[y].push_back(x);
}
}
}
这是我在图中查找生成树的 DFS 算法。我需要将其转换为 BFS 算法,以找到两个顶点之间的最短路径。嗯……我该怎么做?BFS 算法与上面的算法有些相似吗?还是我需要从头开始写?
l - 邻接列表 dfst - 在末尾保存生成树的数组 x - 起始顶点 y - 辅助变量