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

news/2024/7/15 20:15:01 标签: 图论, 算法, 数据结构, queue, java
java">public class DepthFirstPaths {
    private boolean marked[];// 用于存放被标记过的顶点
    private int edgeTo[];// 数组内的元素表示某顶点,其索引表示某顶点的相邻顶点。
    private final int s;// 起点
    private int count;// 已遍历顶点的数量

    public DepthFirstPaths(Graph G, int s) {
        marked = new boolean[G.V()];
        edgeTo = new int[G.V()];
        this.s = s;
        dfs(G, s);
    }


    public void dfs(Graph G, int s) {
        marked[s] = true;
        count++;
        for (int w : G.adj(s)) {
            if (!marked[w]) {
                edgeTo[w] = s;
                dfs(G, w);
            }
        }
    }
    public boolean hasPathTo(int v) {
        return marked[v];
    }
    /**
     * 返回到达顶点v的路径
     *edgeTo[]数组内的元素表示某顶点,其索引表示某顶点的相邻顶点。pathto方法用于将edgeTo数组转换为一个stack,而该stack则表示一条从顶点w到顶点v的路径
     * @param v
     * @return stack
     */
    public Iterable<Integer> pathTo(int v) {
        if (!hasPathTo(v))
            return null;
        Stack<Integer> stack = new Stack<Integer>();
        for (int x = v; x != s; x = edgeTo[x])
            stack.push(x);
        stack.push(s);
        return stack;
    }
}

Queue

java">import java.util.Iterator;

public class Stack<Item> implements Iterable<Item> {
    private Node first;// 头结点
    private int N; // 栈中元素个数
    private class Node {
        Item item;
        Node next;
    }
    public void push(Item item) {
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;
        N++;
    }
    public Item pop() {
        Item item = first.item;
        first = first.next;
        N--;
        return item;
    }
    public boolean isEmpty() {
        return N == 0;
    }
    public int size() {
        return N;
    }
    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/1489916.html

相关文章

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;…

数据库(基础概念part two)

域&#xff1a; 相同数据类型的值得集合 笛卡尔积&#xff1a; 共十八个组合&#xff0c;每个组合表示一个元组。 上述笛卡尔积的一个子集为关系。 每一列称之为属性。 码&#xff1a; 1.候选码&#xff1a;一个关系中唯一标识元组的属性。 2.主码&#xff1a;一个关系中多…

RabbitMQ开启Web管理插件

一&#xff1a;开启Web管理插件 ./rabbitmq-plugins enable rabbitmq_management 关闭防火墙 service iptables stop 二&#xff1a;登录rabbitmq报错User can only log in via localhost 访问页面网站&#xff1a;http://192.168.10.152:15672/&#xff0c;并使用默认用户…

计算机网络(基础)

互联网 网络由节点和链路组成&#xff0c;网络通过路由器互联则形成互联网。 因特网是世界上最大的互联网。 其中&#xff0c;路由器是实现分组交换的关键构件。&#xff08;五层协议不同层级会有不同的中间设备将网络进行互联&#xff0c;比如转发器在物理层&#xff0c;网…

Java面试遇到的问题总结

一&#xff1a;讲一下前后端交互用的什么协议&#xff0c;如何保证数据的传递安全性&#xff1f;数据的抓包了解吗&#xff1f; 前言 前后端分离的开发方式&#xff0c;我们以接口为标准来进行推动&#xff0c;定义好接口&#xff0c;各自开发自己的功能&#xff0c;最后进行联…

深入理解java虚拟机--第二章读书笔记

Java虚拟机运行时数据区有 局部变量表中存储了各种基本数据类型&#xff08;int float Boolean等&#xff09;&#xff0c;对象引用&#xff08;reference类型&#xff09; Hotspot虚拟机中将虚拟机栈和本地方法栈合二为一。 堆中则存放了对象实例和数组。 方法区存储了已经被…