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(""); } } return 0; }
测试数据
输入样例:
8 6
0 7
0 1
2 0
4 1
2 4
3 5
输出样例:{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }
{ 0 1 2 7 4 }
{ 3 5 }
{ 6 }
加return的测试用例结果
不加return的测试用例结果
显然,不加才是对的。
请问为什么?
加和不加的区别在哪里?
精彩评论