ホームページ  >  に質問  >  本文

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

直接上代码来说明问题:(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的测试用例结果

122.png

不加return的测试用例结果

122.png

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

高洛峰高洛峰2929日前764

全員に返信(1)返信します

  • 三叔

    三叔2016-11-04 11:30:38

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

    返事
    0
  • キャンセル返事