1. 写在前面
作为一个初步接触的萌新,我认为很有必要将我学习算法的心路历程给记录下来。
记录也是笔记,方便以后的复习,同时提高我的写作能力。
而且也能起到复习数据结构知识的作用,毕竟当时没怎么学好=.=。
先从图论开始吧
2. 直接代码
无向图的遍历之深度优先_递归
这里选择使用邻接矩阵来表示图
public class RecursionDfs {
//初始化邻接矩阵
static int[][] graph = {
{0,1,1,0,0,0,0,0},
{1,0,0,1,1,0,0,0},
{1,0,0,0,0,1,1,0},
{0,1,0,0,0,0,0,1},
{0,1,0,0,0,0,0,1},
{0,0,1,0,0,0,1,0},
{0,0,1,0,0,1,0,0},
{0,0,0,1,1,0,0,0},
};
//是否访问
static boolean[] isVisited = new boolean[8];
//主方法
public static void main(String[] args) {
for(int i = 0; i < isVisited.length; i++) {//要这个循环,是因为此图可能不止一个连通分量
if(!isVisited[i]) {
dfs(i);//访问
}
}
}
//深度优先遍历算法
public static void dfs(int edge) {
isVisited[edge] = true;//设置已访问
System.out.println("v" + edge);//访问输出语句
for(int i = 0; i<isVisited.length; i++) {//遍历每个顶点
if(graph[edge][i] == 1 && !isVisited[i]) {//==1表示与此顶点有连线,!isVisited[i]表示此顶点还未访问,则进行递归访问
dfs(i);//递归
}
}
}
}
具体图