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的测试用例结果
显然,不加才是对的。
请问为什么?
加和不加的区别在哪里?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
遍历图。。。
你设定的 i<N
加了就执行一次
不加就直到i==N