没有两次搜索的无向图的 DFS

DFS for undirected Graphs whithout two searches

早上好,

我是图形界的新手,有一些关于DFS的问题,在其他题目中没有找到。

我拿了站点的DFS代码:

http://www.geeksforgeeks.org/depth-first-traversal-for-a-graph/

(我采用了 Java 实现)

该图是在主函数中构建的:

    g.addEdge(0, 1);
    g.addEdge(0, 2);
    g.addEdge(1, 2);
    g.addEdge(2, 0);
    g.addEdge(2, 3);
    g.addEdge(3, 1);
    g.addEdge(2, 4);   

但是如果我像这样更改第一行:

    g.addEdge(1, 0);

DFS结果不同,因为是有向图。那么将 DFS 实现为无向图的最佳方法是什么,而不需要在列表上做两个 "searches"? (我认为这是最简单的方法)。 我找到了几种方法来实现 DFS 到有向图,但 none 到无向图。 DFS 会不会只用于有向图?

关于图表最好的书是什么?

此致

安东尼奥

您使用的代码实际上非常好。 处理这个问题的最简单方法是更改​​图形而不是 DFS 的实现。因此,您按如下方式更改函数 addEdge 以在两个方向上添加边:

void Graph::addEdge(int v, int w)
{
    adj[v].push_back(w); // Add w to v’s list.
    adj[w].push_back(v);
}