直接上代码来说明问题:
(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 }
显然,不加才是对的。
请问为什么?
加和不加的区别在哪里?
Traverse the graph. . .
If you set i<N
, it will be executed once
If you don’t add it, it will be executed until i==N