DFS递归实现图的遍历,在函数中加return和不加return的区别

发布于 2022-09-04 02:29:42 字数 1483 浏览 26 评论 0

直接上代码来说明问题:
(return 指的是 void DFS( int x) 函数里面的那个)


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int check[11] = {0};
int Graph[11][11];
int N;

void DFS( int x){
    int i,j;
    check[x] = 1;
    printf("%d ",x);
    
    for( i = 0; i < N; i++){
        if( Graph[x][i] && !check[i]){
            return DFS(i);//加不加指的是这个return,不加return即DFS(i);
        }
    }
}

int main(){
    
    int E;
    int i,j;
    int v,w, index; 
    scanf("%d %d",&N, &E); 
    memset(Graph, 0, N*N);
        
    /* 读取边 */
    for( i = 0 ; i < E; i++){
        scanf("%d %d",&v, &w);
        Graph[w][v] =Graph[v][w]=  1;
    }
    
    /* DFS */
    for( i = 0; i < N; i++ ){
        if( !check[i] ){
            printf("{ ");
            DFS(i);
            printf("}");
            printf("\n");    
        }
    }
    return 0;
}

测试数据

输入样例:

8 6
0 7
0 1
2 0
4 1
2 4
3 5
输出样例:

{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }

加return的测试用例结果

clipboard.png

不加return的测试用例结果

clipboard.png

显然,不加才是对的。
请问为什么?
加和不加的区别在哪里?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

走野 2022-09-11 02:29:42

遍历图。。。
你设定的 i<N
加了就执行一次
不加就直到i==N

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文