Graph 无向图无两次搜索的DFS

Graph 无向图无两次搜索的DFS,graph,graph-algorithm,Graph,Graph Algorithm,早上好 我是图形世界的新手,我对DFS有一些问题,这是我在其他主题中没有发现的 我获取了该站点的DFS代码: (我接受了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); 但是如果我像这样改变第一行:

早上好

我是图形世界的新手,我对DFS有一些问题,这是我在其他主题中没有发现的

我获取了该站点的DFS代码:

(我接受了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是否仅用于有向图

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

问候


Antonio

您使用的代码实际上相当不错。 处理这一问题的最简单方法是更改图形,而不是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);
}

您使用的代码实际上相当不错。 处理这一问题的最简单方法是更改图形,而不是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);
}

我理解邻接矩阵并用它来解himI理解邻接矩阵并用它来解himIhim@user3552769我回答你的问题了吗?如果是,请接受/投票表决答案。如果没有,请发表评论。很抱歉,需要登录时间回复,但我正在度假。我在另一个网站上找到了相同的解决方案!不管怎样,你的想法很好:)谢谢你帮我解决问题question@user3552769我回答你的问题了吗?如果是,请接受/投票表决答案。如果没有,请发表评论。很抱歉,需要登录时间回复,但我正在度假。我在另一个网站上找到了相同的解决方案!不管怎样,你的想法很好:)谢谢你解决我的问题