C++ 基于范围的for循环和普通for循环深度优先搜索实现之间的差异
我正在尝试为图形数据结构实现深度优先搜索算法,我的函数如下所示:C++ 基于范围的for循环和普通for循环深度优先搜索实现之间的差异,c++,for-loop,range-based-loop,C++,For Loop,Range Based Loop,我正在尝试为图形数据结构实现深度优先搜索算法,我的函数如下所示: void dfs(int x, vector <v_Int>& Adjacency_List, v_Int& visited) { visited[x] = 1; //Mark current vertex as visited for (int i = 0; i < Adjacency_List[x].size(); i++) { //Iterate through all n
void dfs(int x, vector <v_Int>& Adjacency_List, v_Int& visited) {
visited[x] = 1; //Mark current vertex as visited
for (int i = 0; i < Adjacency_List[x].size(); i++) { //Iterate through all neighbours of vertex x
if (visited[i] != 1) { //If neighbour not visited, recursively go there
dfs(i, Adjacency_List, visited);
}
}
}
只要调用dfs函数,访问的数组就会相应地更新。我不太清楚为什么第二个实现可以工作,但我的初始实现没有,因为两个实现似乎具有相似的逻辑。谢谢你的帮助
编辑:v_Int是一个typedef,我在第一个实现中声明为整数向量,邻居不是I,它的邻接列表[x][I]
int neighbour = Adjacency_List[x][i];
if (visited[neighbour] != 1) { //If neighbour not visited, recursively go there
dfs(neighbour, Adjacency_List, visited);
}
您将
i
替换为v
,但是v
实际上相当于邻接列表[x][i]
。什么是v\u Int
visited[v]
将一个v_Int
与另一个v_Int
建立索引,我很惊讶它能够编译。这两个循环完全不同。第一个使用i
作为索引,值从0到size()-1
。范围循环使用访问的数组中的实际值。职业训练局是一个打字错误。
int neighbour = Adjacency_List[x][i];
if (visited[neighbour] != 1) { //If neighbour not visited, recursively go there
dfs(neighbour, Adjacency_List, visited);
}