基于二维矩阵的深搜dfs和广搜bfs Java实现

这篇博客主要介绍了如何在二维矩阵中使用深度优先搜索(DFS)和广度优先搜索(BFS)进行迷宫求解。区别于传统的BFS,此处直接通过矩阵进行相邻节点的搜索,无需邻接矩阵。博客提供了一个graph类,包含了DFS算法,并给出了测试代码。

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

广搜的概念不用多讲了,这里的算法主要针对二维矩阵(迷宫)的广搜。

二维矩阵中的点一般只与上下左右4个结点相邻,看题目定义,有的和斜角也相邻。所以就没必要用邻接矩阵存边数据,直接搜就可以啦。

与传统bfs不同的数据结构:
graph(二维矩阵图)
vis(二维标记,标记对应位置是否访问过)
direction(存行走方向,比如往左走就是{0,-1},表示 i 不变,j 减一嘛,同理右{0,1},上 {-1,0},下{1,0})
node(存点的位置 {x, y})

步骤不多说啦,大同小异嘛,注意队列里是存点的位置。

这里的代码主要用一个graph类来描述一个图,然后在图里面写一个深搜算法。仅作为参考。刷题的人可以只用深搜算法即可,当然要准备好对应的数据结构啦。

//此类是用来描述一个基于二维数组的图

package Graph;

import java.util.LinkedList;

public class SimpleGraph {
    private static int nodeNum = 0;
    private static int[][] graph;
    private static int[][] direction = {
  
  {-1, 0}, {0, 1}, {1, 0}, {0, -1}};
    private static int[][] visited;

    public SimpleGraph() {}

    public SimpleGraph(int[][] graph) {
        this.graph = graph;
        visited = new int[graph.length][graph[0].length];
    }

    public int getNodeNum() {
        return nodeNum;
    }

    //广度优先搜索Breadth First Search,从点(x, y)开始,队列实现
    public void bfs(int x, int y) {
    
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值