嗨,伙计们,我有问题需要帮助。也许这不是话题,但我已经把它贴在代码评论上了,但没有答案我用伪代码写的,我被卡住了,我应该检查一个连接组件中的顶点数是否相等我的想法是实现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)