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 アルゴリズムです。2 つの頂点間の最短経路を見つける BFS アルゴリズムに変換する必要があります。うーん...どうすればいいですか?BFS アルゴリズムは、上記のものと多少似ていますか? それとも最初から書く必要がありますか?
l - 隣接リスト dfst - 最後にスパニング ツリーを保持する配列 x - 開始頂点 y - ヘルパー変数