c++ - DFS递归实现图的遍历,在函数中加return和不加return的区别
巴扎黑
巴扎黑 2017-04-17 14:50:12
0
1
431

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

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

巴扎黑
巴扎黑

全部回复(1)
洪涛

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!