数据结构与算法Java版——图及其遍历

本文介绍了如何使用Java实现图的数据结构,重点讲解了深度优先遍历(类似于树的前序遍历)和广度优先遍历(类似于树的层序遍历)的算法思路,并提供了相应的伪代码。通过这两种遍历方式,可以访问到图中所有与给定点有路径相通的顶点。
摘要由CSDN通过智能技术生成

图一般有两种实现方式,一种是邻接矩阵,一种是邻接表。这里为大家带来的是邻接矩阵实现图。

这里重点说下图的遍历的两种算法思路:

深度遍历:

深度遍历类似于树的前序遍历。

1、访问顶点v;

2、从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度遍历;

3、重复上述两步,直到所有和v有路径相通的顶点都被访问到;

伪代码:

1、访问顶点v,state[v]=1;

2、w=顶点v的第一个邻接点;

3、while(w存在)

  3.1、if(w未被访问)从顶点出发递归执行该算法;

  3.2、w=顶点v的下一个邻接点;

广度优先遍历( breadth-first traverse)类似于树的层序遍历 思路为:

(1) 访问顶点v;

(2) 依次访问v 的各个未被访问的邻接点v1,v2,v3,..vk;

(3) 分别从V,V2,..,Vk 出发依次访问到他们没有被访问的邻接点,并使”先被访问顶点的邻接点”先于“后被访问顶点的邻接点”被访问。直到图中所有与顶点v有路径相通的顶点都被访问到。

1.初始化队列Q;

2.访问顶点v; state [v]=1; 顶点v人队列Q;

3.while (队列Q非空)
  3.1 v=队列Q的队头元素出队;
  3.2  w=顶点v的第一个邻接点;

  3.3while (w存在)
    3.3.1 如果w 未被访问,则访问顶点w; 则访问顶点w;state[w]=1;顶点w入队列Q;

    3.3.2  w=顶点v的下一个邻接点;

代码如下:

public class Graph {
   
    /**
     * 图的顶点数
     */
    private int vertexSize = 0;
    /**
     * 图的邻接矩阵
     */
    private int[][] matrix = null;
    /**
     * 顶点数组
     */
    private int[] vertex = null;
    /**
     * 代表两点之间无边
     */
    private static final int MAX_SIZE = 1000;
    /**
     * 每个点被访问的状态 0为没有访问,1为被访问
     */
    private int[] state = null;
    /**
     * 队,用于广度优先遍历
     */
    private LinkedList<Integer> queue = new LinkedList<Integer>();

    /**
     * 求顶点
     * 
     * @return
     */
    public int getVertex() {
        return vertexSize;
    }

    public Graph(int size, int[]... number) {
        this.vertexSize = size;
        matrix = new int[size][size];
        vertex = new int[size];
        //初始化数组
        for
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值