在 C 中使用 DFS 从邻接矩阵打印出有向图的循环

问题描述 投票:0回答:0
#include<stdio.h>
#include<stdlib.h>

int visited[8] = {0,0,0,0,0,0,0,0};
    int A[8][8] = {
        {0, 0, 0, 0, 0, 0, 0, 1},
        {0, 0, 1, 0, 0, 0, 0, 1},
        {0, 1, 0, 0, 1, 1, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 1, 0, 1},
        {0, 0, 0, 1, 0, 0, 0, 1},
        {0, 1, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 1, 0, 0, 0}
    };

void DFS(int i){
    printf("%d ", i);

    int back = 0; 

    visited[i] = 1;

    for (int j = 0; j < 8; j++) {
        if (visited[j]) {
                if (back == 1 )  {
                        printf("\nrevisited: %d\n", j);
                }
        back = 1;
        }
        if(A[i][j]==1 && !visited[j]){
            DFS(j);
        }
    }
}

int main(){
    // DFS Implementation
    DFS(0);
    return 0;
}

我有一个有向图的邻接矩阵,我试图打印出这个有向图中的任何一个循环。

到目前为止,此代码打印出 DFS 遍历以及我在进行 DFS 遍历时已经访问过的任何节点。

我知道这个特定的有向图中的循环如下: 1 2 4 7 4 5 7

当我只打印出 DFS 部分而不打印出我已经访问过的节点时,我得到 0 7 4 5 3。我错过了到达节点 2、1 和 6 的机会。

此外,当我尝试获取最后一次访问的节点以打印出一个循环时,我得到 7 5 7,这不是一个有效的循环。

我错过了什么?

c depth-first-search cycle adjacency-matrix directed-graph
© www.soinside.com 2019 - 2024. All rights reserved.