完整代码示例-Java实现图的深度优先遍历(DFS)
代码示例
package DataStrcture.graphdemo;
import java.util.ArrayList;
import java.util.Arrays;
public class DFSDemo {
//测试方法
public static void main(String[] args) {
String[] str = {"A", "B", "C", "D", "E", "F", "G","H"};
DFSDemo bg = new DFSDemo(str.length);
for(String v : str){
bg.addVertex(v);
}
bg.addEdges(0, 2, 1);
bg.addEdges(0, 3, 1);
bg.addEdges(2, 3, 1);
bg.addEdges(2, 1, 1);
bg.addEdges(5, 6, 1);
bg.addEdges(5, 0, 1);
bg.addEdges(6, 4, 1);
System.out.println(" "+Arrays.toString(str));
bg.showGraph();
bg.dfsTraverse();
}
//材料
/**
* 1. 存储顶点的集合arrayList
* 2. 存储顶点之间的边信息的数组int[indexOfV1][indexOfV2] edges;
* 3. 记录边的实际数量 numOfEdges
*/
ArrayList<String> vertexs;
int[][] edges;
int numOfEdges;
boolean[] isVisited;
//构造器, 初始化
public DFSDemo(int n) {
vertexs = new ArrayList<String>(n);
edges = new int[n][n];
numOfEdges = 0;
isVisited = new boolean[n];
}
//1. 添加顶点
public void addVertex(String vertex){
vertexs.add(vertex);
}
//2.添加顶点之间的边信息
/**
* @param v1 顶点A的索引
* @param v2 顶点B的索引
* @param weight 反映两个 顶点之间是否存在边
* weight=1, 存在; weight=0, 不存在;
*/
public void addEdges(int v1, int v2, int weight) {
edges[v1][v2] = weight;
edges[v2][v1] = weight;
numOfEdges +=1;
}
public void showGraph() {
// for (int[] v : edges) {
// System.out.println(Arrays.toString(v));
// }
for(int i=0; i<edges[0].length; i++){
System.out.print((char)('A'+i)+" ");
for(int j=0; j<edges.length; j++){
System.out.print(edges[i][j]+", ");
}
System.out.println();
}
}
//dfs
/**
* 从起始节点开始进行深度优先遍历
* 不断往下查找(isVisited==false && edges[index][0->length]==1)
* isVisited[index]=true, 已经访问过, =false未访问过;
* @param index 起始节点的索引
*/
public void dfs(int index) {
System.out.print(vertexs.get(index) + "->");
isVisited[index] = true;
for (int i = 0; i < vertexs.size(); i++) {
if (!isVisited[i] && edges[index][i] == 1) {
dfs(i);
}
}
}
public void dfsTraverse() {
for (int i = 0; i < vertexs.size(); i++) {
if (!isVisited[i])
dfs(i);
}
}
}
执行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)