我正在阅读关于BFS和DFS的图算法.当我分析通过DFS在Graph中查找强连通分量的算法时,我想到了一个疑问.为了找到强连通分量,什么书(Coremen)做,首先它在图上运行DFS以获得顶点的结束时间然后再次按照完成时间的降序在图的转置上运行DFS我们从第一个DFS得到的.但是我无法理解为什么第二个DFS必须按照完成时间运行.我的意思是即使我们直接在图的转置上运行DFS(忽略完成时间),它是否也给了我们连接的组件,因为通过转置我们已经阻止了到其他组件的路径.
假设我有一个vector a = {"the", "of"}和一个vector b = {"oranges", "the", "of", "apples"}.
我想比较这两个向量和删除元素a也被加b.这就是我想出的:
for (int i = 0; i < a.size(); i++) {
for (int j =0; j < b.size(); j++) {
if (a[i] == b[j]) {
a.erase(a.begin() + i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个循环并没有删除最后一个元素a.奇怪的!