#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,这不是一个有效的循环。
我错过了什么?