찾다

 >  Q&A  >  본문

c++ - 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的测试用例结果

不加return的测试用例结果

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

巴扎黑巴扎黑2773일 전482

모든 응답(1)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 14:52:12

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

    회신하다
    0
  • 취소회신하다