第四章--邻接表数组表示无向图

news/2024/7/15 20:12:06 标签: 图论, java, 算法, 数据结构

无向图中的顶点用数组的索引表示,该索引中的元素用bag表示,而这些元素指的是索引对应的顶点所连接的顶点。

public class Graph {
    private final int V;// 顶点个数
    private int E;// 边的数目
    private Bag<Integer> adj[];// 邻接表

//初始化邻接表
    public Graph(int v) {
        this.V = v;
        this.E = 0;
        adj = (Bag<Integer>[]) new Bag[V];
        for (int i = 0; i < V; i++) {
            adj[i] = new Bag<Integer>();
        }
    }

    public int V() {
        return V;
    }

    public int E() {
        return E;
    }

    public void addEdge(int v, int w) {
        // 每条边要添加两次
        adj[v].add(w);// 将w添加到v的链表中
        adj[w].add(v);// 将v添加到w的链表中
        E++;
    }


    public Iterable<Integer> adj(int v) {
        return adj[v];
    }
}

Bag

import java.util.Iterator;

public class Bag<Item> implements Iterable<Item> {
    private Node first;// 头结点
    // 链表的结点

    private class Node {
        Item item;
        Node next;
    }

    public void add(Item item) {
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;

    }

    public Iterator<Item> iterator() {

        return new listIterator();
    }

    private class listIterator implements Iterator<Item> {
        private Node current = first;

        public boolean hasNext() {

            return current != null;
        }

        public Item next() {
            Item item = current.item;
            current = current.next;
            return item;
        }

    }
}

 


http://www.niftyadmin.cn/n/1489921.html

相关文章

spark-submit 提交任务及参数说明

spark-submit 提交任务及参数说明 spark-submit 可以提交任务到 spark 集群执行&#xff0c;也可以提交到 hadoop 的 yarn 集群执行。 1. 例子 一个最简单的例子&#xff0c;部署 spark standalone 模式后&#xff0c;提交到本地执行。 ./bin/spark-submit \ --master spark:/…

Spark中JavaRDD与JavaPairRDD的相互转换

一&#xff1a;方法 JavaRDD > JavaPairRDD&#xff1a;通过mapToPair函数 JavaPairRDD > JavaRDD&#xff1a;通过map函数转换 二&#xff1a;代码实例如下 import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.s…

第四章--无向图广度优先搜索算法

public class BreadthFirstPaths {private boolean[] marked;// 保存被标记的顶点private int[] edgeTo;// 保存起点到与之连通的顶点之间的最短路径private final int s;// 起点public BreadthFirstPaths(Graph G, int s) {marked new boolean[G.V()];edgeTo new int[G.V()]…

第四章--无向图深度优先搜索算法

public class DepthFirstPaths {private boolean marked[];// 用于存放被标记过的顶点private int edgeTo[];// 数组内的元素表示某顶点&#xff0c;其索引表示某顶点的相邻顶点。private final int s;// 起点private int count;// 已遍历顶点的数量public DepthFirstPaths(Gra…

redis的持久化方式RDB,AOF和其两种的区别

一&#xff1a;为什么要用数据持久化 在项目中使用redis做缓存&#xff0c;为了方便多个业务之间进行数据的共享&#xff0c;由于redis的数据都是放是存放在内存中的&#xff0c;如果没有配置持久化&#xff0c;redis重启后数据就全丢失了&#xff0c;于是需要开启redis的持久…

RabbitMQ集群环境的搭建

一&#xff1a;Erlang的安装 Erlang的版本和RabbitMQ的版本有严格的要求&#xff0c;具体的对应关系请查看RabbitMQ官网 官网地址如下&#xff1a;https://www.rabbitmq.com/which-erlang.html 1&#xff1a;解压 tar xf otp_src_21.2.tar.gz 2&#xff1a;进入到otp_src_…

数据库(基础概念part one)

数据库定义 数据库是一个数据集合&#xff0c;而该数据集合是有结构&#xff0c;相关联和合理存放的。 数据库相关概念 数据管理的发展 人工管理&#xff1a;不共享&#xff0c;不独立&#xff0c;无结构&#xff0c;数据不保存。 文件系统&#xff1a;共享性差&#xff0c;…