大家好我有疑问并且需要帮助。也许它是offtopic但我已经在Code Review上发布了它但没有人回答。我用伪代码编写了这个,我被卡住了。我应该检查一个连接组件中的顶点数是否均匀。我的想法是实现DFS并放置一个计数器然后检查计数器%2 == 0是否。我的问题是我不知道在哪里放柜台。 让我们说DFS:是主要方法。
G =(V,E)V-顶点,E-边缘 s-start point(vertex)
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)`
答案 0 :(得分:2)
您可以在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
或者在全局范围内声明计数器,并在每次DFS1
调用时将其递增:
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)
答案 1 :(得分:0)
每当您将Discovered[u]
设置为True
且尚未True
时,您就会找到一个新的连接顶点,并且应该增加您的计数器。
由于DFS1
永远不会返回任何内容,因此我不确定检查它返回的内容会有多大帮助,特别是因为在使用该范围内不知道的变量调用它之后进行检查。