dfs 算法概述
DFS(深度优先搜索)是一种用于遍历或搜索树或图的算法。它从根节点开始,尽可能深地探索每个分支,直到找到目标节点或无法继续为止。如果无法继续,则回溯到上一个节点并尝试其他分支。
在实现DFS时,可以使用递归或栈来跟踪访问过的节点。DFS算法通常用于解决迷宫问题、图形着色、拓扑排序等问题。 1
问题描述
现有一个二维数组
int [][] graph = {
{1,3,5},
{2,4,7},
{9,8,9}
};
用dfs算法方式实现对其的遍历
解题思路
dfs很经典的用法,用一个数组表示其走过的行路径,再依次递归遍历其列数据即可。
代码展示
package com.test.service;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @descriptions:
* @author: wangzhen
* @date: 2022/12/6 17:11
* @version: 1.0
*/
public class RecursionTwoDArr {
private static final Logger LOGGER = LoggerFactory.getLogger(RecursionTwoDArr.class);
public static void main(String[] args) {
// 3行3列的矩阵。
int [][] graph = {
{1,3,5},
{2,4,7},
{9,8,9}
};
// 给定一个判断的数组
List<Boolean> booleansList = new LinkedList<Boolean> ();
for (int i = 0; i < graph.length; i++) {
booleansList.add (false);
}
Boolean[] visited = new Boolean[booleansList.size()];
visited = booleansList.toArray (visited);
dfs (graph,0,visited);
}
public static void dfs(int[][] graph, int start, Boolean[] visited) {
visited[start] = true;
System.out.print(start + " ");
for (int i = 0; i < graph[start].length; i++) {
LOGGER.info ("当前遍历的元素{},横坐标{},纵坐标{}",graph[start][i],start,i);
if (start == graph.length-1 && i==graph[start].length -1){
break;
}
if (i== (graph[start].length -1)){
start++;
}
if (start< graph[0].length && !visited[start]) {
LOGGER.info ("当前start为:{}",start);
dfs(graph, start, visited);
}
}
}
}
写在最后
抛砖引玉,先了解该算法,再从本题入手理解该算法的解题思路。
引用自chatgpt3.5 ↩︎