未定向图的DFS,无需两次搜索

时间:2017-09-24 14:11:14

标签: graph graph-algorithm

早上好,

我是图形界的新手,我对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实现为无向图的最佳方式是什么,而不需要进行两次"搜索"在名单上? (我认为这是最简单的方法)。 我找到了几种方法来实现DFS到有向图,但没有一种方法可以实现无向图。 DFS会用于有向图吗?

关于图表的最佳书籍是什么?

此致

安东尼奥

1 个答案:

答案 0 :(得分:0)

您使用的代码实际上非常好。 处理此问题的最简单方法是更改​​图形而不是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);
}