c++ - DFS递归实现图的遍历,在函数中加return和不加return的区别

浏览:34日期:2023-04-10

问题描述

直接上代码来说明问题:(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 60 70 12 04 12 43 5输出样例:

{ 0 1 4 2 7 }{ 3 5 }{ 6 }

加return的测试用例结果

c++ - DFS递归实现图的遍历,在函数中加return和不加return的区别

不加return的测试用例结果

c++ - DFS递归实现图的遍历,在函数中加return和不加return的区别

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

问题解答

回答1:

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

相关文章: