六、图结构

文章目录

  • 一、引入
  • 二、基本概念
  • 三、图的表示
  • 四、图的遍历
    • 4.1 图的深度优先遍历(DFS)
    • 4.2 图的广度优先遍历(BFS)
    • 4.3 图的深度优先 VS 广度优先

一、引入

在这里插入图片描述

在这里插入图片描述

二、基本概念

在这里插入图片描述

在这里插入图片描述

三、图的表示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

package com.gyh.grapg;import java.util.ArrayList;
import java.util.Arrays;/*** @author Gao YongHao* @version 1.0*/
public class Graph {private ArrayList<String> vertexList; // 存储顶点的集合private int[][] edges; // 领接矩阵private int numOfEdges = 0;// 表示边的数目public static void main(String[] args) {int n = 5;String[] VertexValue = {"A", "B", "C", "D", "E"};// 创建图对象Graph graph = new Graph(5);for (String s : VertexValue) {graph.insertVertex(s);}// 添加边graph.insertEdge(0,1,1);graph.insertEdge(0,2,1);graph.insertEdge(1,2,1);graph.insertEdge(1,3,1);graph.insertEdge(1,4,1);// 显示邻接矩阵graph.showGraph();}public Graph(int n) {this.edges = new int[n][n];vertexList = new ArrayList<>();}// 图中常用的能方法// 返回结点的个数public int getNumOfVertex() {return vertexList.size();}// 返回边的个数public int getNumOfEdges() {return numOfEdges;}// 显示图对应的矩阵public void showGraph() {for (int[] edge : edges) {System.out.println(Arrays.toString(edge));}}public int getWeight(int v1, int v2) {return edges[v1][v2];}// 添加结点public void insertVertex(String vertex) {vertexList.add(vertex);}// 添加边public void insertEdge(int v1, int v2, int weight) {if (v1 >= edges.length || v2 >= edges.length) {throw new RuntimeException("该结点标号越界");}// 考虑无向图edges[v1][v2] = weight;edges[v2][v1] = weight;numOfEdges++;}}

四、图的遍历

4.1 图的深度优先遍历(DFS)

在这里插入图片描述

在这里插入图片描述

4.2 图的广度优先遍历(BFS)

在这里插入图片描述

在这里插入图片描述

package com.gyh.grapg;import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;/*** @author Gao YongHao* @version 1.0*/
public class Graph {private ArrayList<String> vertexList; // 存储顶点的集合private int[][] edges; // 领接矩阵private int numOfEdges = 0;// 表示边的数目// 定义数组boolean[],记录某个结点是否被访问过private boolean[] isVisited;public static void main(String[] args) {int n = 5;String[] VertexValue = {"A", "B", "C", "D", "E"};// 创建图对象Graph graph = new Graph(n);for (String s : VertexValue) {graph.insertVertex(s);}// 添加边graph.insertEdge(0, 1, 1);graph.insertEdge(0, 2, 1);graph.insertEdge(1, 2, 1);graph.insertEdge(1, 3, 1);graph.insertEdge(1, 4, 1);// 显示邻接矩阵graph.showGraph();// 深度优先搜索
//        graph.dfs(0);// 广度优先搜索graph.bfs(2, new LinkedList<>());}/*** 广度优先遍历(借助队列实现)** @param v 起始位置*/public void bfs(int v, Queue<Integer> queue) {// 打印当前结点queue.add(v);isVisited[v] = true;while (queue.size() > 0) {v = queue.poll();System.out.println(vertexList.get(v));// 将同一层中各未遍历过的结点下标加入至队列for (int i = 0; i < edges.length; i++) {if (edges[v][i] != 0 && !isVisited[i]) {queue.add(i);isVisited[i] = true; // 加入队列时即设置已访问,不设置可能重复加入队列}}}}/*** 深度优先遍历** @param v 起始位置*/public void dfs(int v) {if (v < 0 || v >= edges.length) {return;}// 打印当前信息(遍历后则设置已经遍历)System.out.println(vertexList.get(v));isVisited[v] = true;// 对其所有的邻接结点进行轮询的递归遍历for (int i = 0; i < edges.length; i++) {if (edges[v][i] != 0 && !isVisited[i]) {dfs(i);}}}public Graph(int n) {this.edges = new int[n][n];vertexList = new ArrayList<>();isVisited = new boolean[n];}// 图中常用的能方法// 返回结点的个数public int getNumOfVertex() {return vertexList.size();}// 返回边的个数public int getNumOfEdges() {return numOfEdges;}// 显示图对应的矩阵public void showGraph() {for (int[] edge : edges) {System.out.println(Arrays.toString(edge));}}public int getWeight(int v1, int v2) {return edges[v1][v2];}// 添加结点public void insertVertex(String vertex) {vertexList.add(vertex);}// 添加边public void insertEdge(int v1, int v2, int weight) {if (v1 >= edges.length || v2 >= edges.length) {throw new RuntimeException("该结点标号越界");}// 考虑无向图edges[v1][v2] = weight;edges[v2][v1] = weight;numOfEdges++;}}

4.3 图的深度优先 VS 广度优先

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV结构分析与形状描述符(22)计算图像中某个轮廓或区域的矩函数moments()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算一个多边形或光栅化形状直到三阶的所有矩。 该函数计算一个向量形状或光栅化形状直到三阶的矩。结果返回在 cv::Moments 结构中。 函数原型…

ATF UFS初始化笔记

1. JESD220 中关于UFS初始化的描述 原文 13.1.3 Initialization and boot code download process The initialization and boot code download process is made up of the following phases: partial initialization, boot transfer and initialization completion. 13.1.3.…

List<Map<String, Object>>汇总统计排序

开发环境&#xff1a;jdk 1.8 需求一&#xff1a; 1、统计每个小时(升序)不同事件的产品产量 2、统计不同事件&#xff08;OK 、NG&#xff09;的总产量 public static void main(String[] args) {//数据源List<Map<String, Object>> list new ArrayList<Map…

云计算实训48——k8s环境搭建(详细版)

1.创建主机、设置ip、设置hostname 2.设置免密登录 # 生成私钥 [rootk8s-master ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphr…

vue3 使用swiper制作带缩略图的轮播图

效果图 实现代码 <template><div class"wrap"><!-- 主轮播图 --><swiper :style"{--swiper-navigation-color: #fff,--swiper-pagination-color: #fff,}" :modules"modules" :navigation"true" :thumbs"{ …

计算机网络 第2章 物理层

文章目录 通信基础基本概念信道的极限容量编码与调制常用的编码方法常用的调制方法 传输介质双绞线同轴电缆光纤以太网对有限传输介质的命名规则无线传输介质物理层接口的特性 物理层设备中继器集线器一些特性 物理层任务&#xff1a;实现相邻节点之间比特&#xff08;0或1&…

pptpd配置文件/etc/pptpd.conf详解

正文共&#xff1a;1111 字 2 图&#xff0c;预估阅读时间&#xff1a;1 分钟 如果要在Linux系统配置PPTP&#xff08;Point-to-Point Tunneling Protocol&#xff0c;点到点隧道协议&#xff09;VPN&#xff0c;一般是使用pptpd软件。pptpd命令通常从配置文件/etc/pptpd.conf中…

单片机拍照_将采集的RGB图像封装为BMP格式保存到SD卡

文章目录 一、前言二、BMP文件结构2.1 BMP图片的格式说明 2.2 RGB888与RGB565格式是什么&#xff1f;&#xff08;1&#xff09;RGB565&#xff08;2&#xff09;RGB888&#xff08;3&#xff09;区别&#xff08;4&#xff09;如何构成&#xff08;5&#xff09;示例 三、实现…

【Leetcode56】合并区间(数组 | 排序)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 先将所有子列表按照start_pos进行排序&#xff0c;有利于保持顺序性&#xff0c;每次处理新子列表时&#xff0c;只用和结果列表ans_lst的最后一个子列表对比&#xff0c;如果有重合则合并&#xff0c;然后将合并的新子列…

Java 入门指南:Java 并发编程 —— 同步工具类 Phaser(相位器)

文章目录 同步工具类Phaser主要特点核心方法使用步骤适用场景使用示例 同步工具类 JUC&#xff08;Java.util.concurrent&#xff09;是 Java 提供的用于并发编程的工具类库&#xff0c;其中包含了一些通信工具类&#xff0c;用于在多个线程之间进行协调和通信&#xff0c;特别…

创新实验报告VC++案例开发十二生肖的俄罗斯方块智力游戏完整代码设计方案

一&#xff0e;项目名称 十二生肖俄罗斯方块 二&#xff0e;开发背景&#xff1a; 俄罗斯方块是一个很低古老的一个小游戏&#xff0c;到但今日它还有很大的魅力。 三&#xff0e;技术路线或工作原理&#xff1a; 采用的软件及开发平台 Micosoft Visual 6.0 项目的总体方…

uniapp 原生插件开发 UI

前言&#xff1a; 在集成某些特定 原生SDK的时候&#xff0c;它本身是带UI控件的。当我们使用 uniapp 开发app的时候实是 可以使使用 nvue 页面&#xff0c;以 weex 的方式嵌入原生的UI控件。 我这边的场景是 接入连连app的支付&#xff0c;它有个自己的密码键盘 控件是原生的页…

树形弹窗选择框/vue2/Element/弹框选择

前言 此类选择器根据vueelementUI实现&#xff0c;使用vue3的可以根据此案例稍作改动即可实现&#xff0c;主要功能有弹出选择、搜索过滤、搜索结果高亮等&#xff0c;此选择器只支持单选&#xff0c;如需多选可在此基础进行改造。 效果图 代码实现 使用时&#xff0c;props-…

NVIDIA AI Workbench 让 Windows 上的 GPU 使用更加简便

NVIDIA AI Workbench 是一款免费的、用户友好型开发环境管理器&#xff0c;可在您选择的系统&#xff08;PC、工作站、数据中心或云&#xff09;上简化数据科学、ML 和 AI 项目。在 Windows、macOS 和 Ubuntu 上&#xff0c;您可以本地开发、测试项目和构建项目原型&#xff0c…

一文说清什么是数据仓库

01 数据仓库的概念 数据仓库的概念可以追溯到20世纪80年代&#xff0c;当时IBM的研究人员开发出了“商业数据仓库”。本质上&#xff0c;数据仓库试图提供一种从操作型系统到决策支持环境的数据流架构模型。 目前对数据仓库&#xff08;Data Warehouse&#xff09;的标准定义&a…

【研赛论文】数学建模2024华为杯论文word/latex模板

国赛结束&#xff0c;研究生瞩目的研赛马上就要来了&#xff0c;相信研究生同学也是在努力的准备当中&#xff0c;在这里祝愿大家能够获得一个好的名次。一举冲出重围&#xff0c;拿下国奖。在数模比赛当中&#xff0c;论文是参赛者唯一能够与评阅老师进行沟通的方式&#xff0…

工厂安灯系统在优化生产流程上的优势

工厂安灯系统通过可视化的方式&#xff0c;帮助工厂管理者和操作工人及时了解生产状态&#xff0c;快速响应问题&#xff0c;从而优化生产流程。 一、安灯系统实时监控与反馈 安灯系统的核心功能是实时监控生产线的状态。通过在生产现场设置灯光、显示屏等设备&#xff0c;工人…

VUE + NODE 历史版本安装

以node 12.20.0为例子&#xff0c;想下载哪个版本&#xff0c;后面写哪个版本 https://registry.npmmirror.com/binary.html?pathnode/v12.20.0/ 安装国内镜像7.1.0 cnpm npm install -g cnpm7.1.0 -g --registryhttps://registry.npmmirror.com 安装vue脚手架4.5.15 cnpm …

【最新顶刊综述】【多模态学习】Vision + X:A Survey on Multimodal Learning in the Light of Data

VisionX&#xff1a;基于数据的多模态学习综述 论文链接 0.论文摘要和信息 摘要 摘要——我们以多感官的方式感知世界并与世界交流&#xff0c;不同的信息源由人脑的不同部分复杂地处理和解释&#xff0c;构成一个复杂但和谐统一的感知系统。为了赋予机器真正的智能&#x…

【信创】麒麟KOS上安装使用网络抓包工具Wireshark

原文链接&#xff1a;【信创】麒麟KOS上安装使用网络抓包工具Wireshark Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在麒麟桌面操作系统上安装和使用Wireshark的文章。Wireshark是一款强大的网络协议分析工具&#xff0c;广泛应用于网络故障排查、网络流…