void MGraph_DFS(MGraph* graph, int v, MGraph_Printf* pFunc) { TMGraph* tGraph = (TMGraph*)graph; int* visited = NULL; int condition = (tGraph != NULL); condition = condition && (0 <= v) && (v < tGraph->count); condition = condition && (pFunc != NULL); condition = condition && ((visited = (int*)calloc(tGraph->count, sizeof(int))) != NULL); if( condition ) { int i = 0; recursive_dfs(tGraph, v, visited, pFunc); for(i=0; i<tGraph->count; i++) { if( !visited[i] ) { recursive_dfs(tGraph, i, visited, pFunc); } } printf("\n"); } free(visited); }
static void recursive_dfs(TMGraph* graph, int v, int visited[], MGraph_Printf* pFunc) { int i = 0; pFunc(graph->v[v]); visited[v] = 1; printf(", "); for(i=0; i<graph->count; i++){ if( (graph->matrix[v][i] != 0) && !visited[i] ){ // 深度优先遍历 直接遍历某个节点边对应的另外一个端点 recursive_dfs(graph, i, visited, pFunc); } } }