如何解决以下两个代码片段有什么区别?
DFS 1:
bool dfs(int source,int color,int dist) {
vis[source] = true;
if (source == dist)
return true;
for (auto x : adj[source]) {
int new_node = x.first;
if (!vis[new_node]) {
int new_color = x.second;
if (new_color == color)
return dfs(new_node,new_color,dist);
}
}
return false;
}
DFS 2:
bool dfs(int source,int dist) {
vis[source] = true;
if (source == dist)
return true;
for (auto x : adj[source]) {
int new_node = x.first;
if (!vis[new_node]) {
int new_color = x.second;
if (new_color == color)
if (dfs(new_node,dist))
return true;
}
}
return false;
}
让我困惑的那条线
return dfs(new_node,dist);
和
if (dfs(new_node,dist))
return true;
这段代码的作用是检查节点 source
和 dist
之间是否存在一条路径,使得路径的所有边都具有相同的颜色。第二个工作正常,但第一个不起作用。它们之间有区别吗?
解决方法
带有 #include <stdio.h>
void putPointer ( int *point,int num ) {
point = #
}
int main(void) {
int a = 42;
int *p;
// p = &a
putPointer( p,a );
printf( "%d\n",*p );
return 0;
}
的版本将总是从函数中返回,无论返回值是 return dfs(new_node,new_color,dist);
还是 true
。
然而,false
将进行递归调用,但仅在该调用返回 if (dfs(new_node,dist)) return true;
时才退出 for
循环(通过返回)。如果它返回 true
,则 false
循环继续下一次迭代。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。