微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以下两个代码片段有什么区别?

如何解决以下两个代码片段有什么区别?

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;

这段代码的作用是检查节点 sourcedist 之间是否存在一条路径,使得路径的所有边都具有相同的颜色。第二个工作正常,但第一个不起作用。它们之间有区别吗?

解决方法

带有 #include <stdio.h> void putPointer ( int *point,int num ) { point = &num; } 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 举报,一经查实,本站将立刻删除。