算导实验八:图搜索BFS算法及存储优化

本文介绍了一种无向图的邻接多重表存储方式,并实现了基于此结构的广度优先搜索(BFS)算法。通过具体实例展示了如何初始化图结构并进行遍历,最终输出图的广度优先遍历过程。

实验要求:

       针对无向图,通过邻接多重表方式进行存储。以节点A为起始节点,输出图的广度优先遍历的过程。

例如,对下图广度优先遍历的过程为:A-B-D-C-E。

 

程序输入:

              文件data.txt

               A,B,C,D,E,F,G,H
               A-B
               A-C
               C-D
               C-E
               D-E
               F-G

程序输出:

              图的广度优先遍历过程。

 

1.实验内容

针对无向图,通过邻接多重表方式进行存储。以节点A为起始节点,输出图的广度优先遍历的过程。例如,对下图广度优先遍历的过程为:A-B-D-C-E。

图1 示例图

2.实验目的

1.掌握无向图的邻接多重表存储结构。

2.掌握图的广度优先搜索算法。

3.邻接多重表定义

当用邻接表存储时,访问或删除一条边(Vi,Vj) 时需要同时访问两个链表ij 并分别找到对应的边结点,这给针对图的边的操作(标记或删除)带来不便利。邻接多重表因此而演变过来的。

定义邻接多重表类GraphMultiplyTable ,类中有三个内部类VertexEdgeGraphEdgeVertex 为图的顶点类;String 类型的属性vName 指明了该顶点的标签,Edge 的属性firstEdge 存储第一条边的指针;int 类型的color 表明当前结点的颜色,用于遍历时使用。

    /**
     * vName-->顶点名称
     * firstEdge-->顶点边链表的头结点
     */
    public static class Vertex
    {
        private String vName;
        private Edge firstEdge;
        private int color;

        public String getvName()
        {
            return vName;
        }

        public int getColor()
        {
            return color;
        }

        public void setColor(int color)
        {
            this.color = color;
        }

        public Vertex(String name)
        {
            this.vName = name;
        }

        public Edge getFirstEdge()
        {
            return firstEdge;
        }
    }

 Edge 类为图的边类,int 类型的属性iVexjVex 指明了当前边所连的两个结点在结点列表中的索引;Edge 类型的属性iLinkjLink 保存两个顶点的边链表指针。

    /**
     * iVe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值