嗨,伙计们,我有问题需要帮助。也许这不是话题,但我已经把它贴在代码评论上了,但没有答案我用伪代码写的,我被卡住了,我应该检查一个连接组件中的顶点数是否相等我的想法是实现DFS并放置一个计数器,然后检查计数器%2==0是否为我的问题是我不知道该把柜台放在哪里。
假设dfs:是主要的方法。
G=(V,E)V-顶点,E-边
s-起点(顶点)

DFS(G,s):
boolean result <-- false
Discovered[v] <-- false for all Vertices V(v)
DFS1(G,s)
if (DFS1(G,u) % 2==0)
result  <-- true


DFS1(G,u):
Discovered[u] <-- true
// counter ++            But where I should initialize it??
foreach Edge (v,u) incident to u
if !Discovered[v]
DFS1(G,v)`

最佳答案

您可以在DFS1内声明计数器,如下所示:

DFS1(G,u):
    Discovered[u] = true
    int counter = 1                     // Count actual node
    foreach Edge (v,u) incident to u
        if !Discovered[v]
            counter += DFS1(G,v)        // Count descendant nodes
    return counter

或者在全局范围内声明计数器,并在每次调用时递增它:
int counter = 0

DFS(G,s):
    boolean result = false
    Discovered[v] = false for all Vertices V(v)
    DFS1(G,s)
    if (counter % 2 == 0)
        result = true

DFS1(G,u):
    Discovered[u] = true
    counter++
    foreach Edge (v,u) incident to u
        if !Discovered[v]
            DFS1(G,v)

10-06 16:01