0

我一直在研究图形中的 DFS 算法并陷入使用局部变量的困境。我有一个看起来像这样的代码:

#define MAX_VERTICES 50

typedef struck GraphType {
    int n; // number of nodes
    int adj_mat[MAX_VERTICES][MAX_VERTICES];
} GraphType;

int visited[MAX_VERTICES];

void insert_vertex(GraphType* g, int v) {
    if (((g->n) + 1) > MAX_VERTICES) {
        fprintf(stderr, "Graph: size of vertices ERROR");
        return;
    }
    g->n++;
}

void insert_edge(GraphType* g, int start, int end) {
    if (start >= g->n || end >= g->n) {
        fprintf(stderr, "Graph: number of vertices ERROR");
        return;
    }
    g->adj_mat[start][end] = 1;
    g->adj_mat[end][start] = 1;
}
void dfs_mat(GraphType* g, int v) {
    int w;
    visited[v] = TRUE;
    printf("vertex %d -> ", v);
    for (w = 0; w < g->n; w++) {
        if (g->adj_mat[v][w] && !visited[w])
            dfs_mat(g, w);
}

int main(void) {
    GraphType *g;
    g = (GraphType*)malloc(sizeof(GraphType));
    for (int i = 0; i < 4; i++)
        insert_vertex(g, i);
    insert_edge(g, 0, 1);
    insert_edge(g, 0, 2);
    insert_edge(g, 0, 3);
    insert_edge(g, 1, 2);
    
    dfs_mat(g, 0);
    free(g);
    return 0;
}

我想要做的是把访问过的[MAX_VERTICES]数组变成一个局部变量(这样我就可以把它作为参数提供给其他函数)。如何将其添加到主函数中并将其从全局使用中删除?也许通过使用指针?

4

1 回答 1

0

您只需在主函数中声明该数组,并将其作为 int * 类型的参数传递给您需要的每个函数。

void dfs_mat(GraphType* g, int *visited, int v) {
    int w;
    visited[v] = TRUE;
    printf("vertex %d -> ", v);
    for (w = 0; w < g->n; w++) {
        if (g->adj_mat[v][w] && !visited[w])
            dfs_mat(g, w);
}
于 2021-04-24T14:03:20.683 回答