图:DFS(深度优先搜索)图解分析代码实现

本文详细介绍了图的深度优先搜索(DFS)算法,通过图例和代码解析了DFS的工作原理,包括从起点A开始的遍历过程,并强调了DFS的重载方法在确保遍历所有顶点中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式。

主要区别在于当到达图中的一个顶点后,DFS直接到达其中的一个(未遍历过的)顶点,之后再以这个新的顶点为基点重复上面的操作;而BFS到达图中的一个顶点后,会先遍历顶点周围的所有(未遍历过的)顶点,然后在以其中的一个顶点为基点,重复上面的操作。

举个简单的例子:
在这里插入图片描述
如果分别用DFS和BFS进行遍历(以A为起点):
DFS:A B D E C (一条路走到头)
BFS:A B C D E (先把A的周围走完,接着走完B和C的周围)

这篇文章将进行DFS的分析,下一篇文章分析BFS:link

二、图的建立

2.1建立图类

  • 使用邻接矩阵保存图的信息。
  • 为了给每个顶点起名字,使用了两组map集合使顶点的名字与邻接矩阵的数字一一对应。
  • 用boolean型数组记录某节点是否被访问过。

代码

class graph{
   
    int vertexNum;//顶点数
    int edgeNum;//边数
    int[][] adjacentMatrix;//邻接矩阵
    boolean[] isVisited;//各顶点是否被访问

    Map<Character,Integer> nameToNum;
    Map<Integer,Character> numToName;
    int index;//顶点名称的下标

    //构造函数
    graph(int vertexnum, int edgenum){
   
        vertexNum = vertexnum;
        edgeNum = edgenum;
        adjacentMatrix = new int[vertexNum][vertexNum];
        nameToNum = new HashMap<>();
        numToName = new HashMap<>();
        isVisited = new boolean[vertexnum];
    }

    //顶点名称
    public void addVertexName(char vertex){
   
        nameToNum.put(vertex,index);
        index++;
    }

    //反转顶点和其索引的对应关系
    public void invertNameToNum(){
   
        Set<Character> chs = nameToNum.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值