Я пытаюсь реализовать DFS с помощью рекурсии, используя следующий код,Как реализовать dfs с помощью рекурсии?
public static void dfs(int i, int[][] mat, boolean [] visited){
visited[i] = true; // Mark node as "visited"
System.out.print(i + "\t");
for (int j = 0; j < visited.length; j++){
if (mat[i][j] ==1 && !visited[j]){
dfs(j, mat, visited); // Visit node
}
}
}
У меня есть матрица и массив для отслеживания посещаемых узлов,
// adjacency matrix for uni-directional graph
int [][] arr = {
// 1 2 3 4 5 6 7 8 9 10
{ 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, // 1
{ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, // 2
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 3
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, // 4
{ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, // 5
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 6
{ 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, // 7
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 8
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, // 9
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} // 10
};
boolean [] visited = new boolean[10];
for (int i =0; i< visited.length;){
visited[i++] = false;
}
Я делаю вызов следующим образом ,
dfs(1, arr, visited);
Это возвращение
// 1 6 7 8 9
, что является неправильным. Она должна возвращать: [1 2 7 8 9 10 3 4 5 6]
График выглядит следующим образом,
это массив вы используете adjancency матрицу? Если это тогда, то является ли ваш график ориентированным графом? поскольку 5 подключен к 6, но 6 не подключен к 5, то же верно для 7-> 8 и 9-> 10 – 11thdimension
Да, массив действительно матрица смежности и ее однонаправленный граф. Я добавил изображение графа с вопросом. – Arefe