【Java】图的初识

文章目录

  • 【Java】图的初识
    • 图是什么
      • 图的基本组成部分
      • 图的类型
      • 图的表示方法
      • 图的常见操作
    • Java中图的表示方法
      • 邻接矩阵
      • 邻接表
    • 常见操作
      • 图的遍历
        • 深度优先搜索(DFS)
        • 广度优先搜索(BFS)
    • 结论

【Java】图的初识

图是什么

图是一种数学概念,用于表示对象及其相互关系。图由顶点(Vertex)和边(Edge)组成,广泛应用于计算机科学、网络分析、物流优化、社交网络等领域。图可以表示各种实际问题,如城市中的交通线路、社交网络中的人际关系等。

图的基本组成部分

  1. 顶点(Vertex)
    • 顶点是图中的一个节点,表示一个对象或实体。
    • 在图中,顶点通常用圆圈或点表示。
    • 顶点可以有名字或编号,用于区分不同的顶点。
  2. 边(Edge)
    • 边是连接两个顶点的线段,表示顶点之间的关系或连接。
    • 边可以是有向的(箭头表示方向)或无向的(无箭头表示无方向)。

图的类型

根据边的性质和连接方式,图可以分为以下几种类型:

  1. 无向图(Undirected Graph)

    • 在无向图中,边没有方向,表示两个顶点之间的关系是双向的。
    • 无向图的边通常用线段表示,不带箭头。
    • 在这里插入图片描述
  2. 有向图(Directed Graph)

    • 在有向图中,边有方向,表示从一个顶点指向另一个顶点。
    • 有向图的边通常用带箭头的线段表示,箭头指示方向。
    • 在这里插入图片描述
  3. 加权图(Weighted Graph)

    • 在加权图中,边带有权重,表示顶点之间的关系具有某种度量(如距离、成本等)。
    • 加权图可以是有向图也可以是无向图,边的权重通常用数值表示。
    • 在这里插入图片描述

图的表示方法

在计算机科学中,图的表示方法主要有以下几种:

  1. 邻接矩阵(Adjacency Matrix)
    • 邻接矩阵是一种二维数组,用于表示顶点之间的连接关系。
    • 如果顶点i和顶点j之间有边,则matrix[i][j]为1(或权重值),否则为0。
    • 邻接矩阵适用于稠密图(边数接近顶点数的平方),但对于稀疏图(边数远小于顶点数的平方)来说,存储效率较低。
  2. 邻接表(Adjacency List)
    • 邻接表是一种数组加链表的结构,每个顶点对应一个链表,链表中存储与该顶点相邻的顶点。
    • 邻接表适用于稀疏图,存储效率较高,因为只存储实际存在的边。

图的常见操作

在使用图时,有许多常见的操作,包括:

  1. 添加边:在图中添加一条边,以表示两个顶点之间的新关系。
  2. 删除边:从图中删除一条边,以表示两个顶点之间的关系不再存在。
  3. 遍历图:访问图中的所有顶点和边,常用的遍历方法包括深度优先搜索(DFS)和广度优先搜索(BFS)。

Java中图的表示方法

在Java中,图的表示方法主要有两种:邻接矩阵(Adjacency Matrix)和邻接表(Adjacency List)。

邻接矩阵

邻接矩阵是一种二维数组,用于表示顶点之间的连接关系。如果顶点i和顶点j之间有边,则matrix[i][j]为1(或权重值),否则为0。

public class Graph {private int[][] adjacencyMatrix;private int numVertices;public Graph(int numVertices) {this.numVertices = numVertices;adjacencyMatrix = new int[numVertices][numVertices];}public void addEdge(int i, int j) {adjacencyMatrix[i][j] = 1;adjacencyMatrix[j][i] = 1; // 对于无向图}public void removeEdge(int i, int j) {adjacencyMatrix[i][j] = 0;adjacencyMatrix[j][i] = 0; // 对于无向图}public void printGraph() {for (int i = 0; i < numVertices; i++) {for (int j = 0; j < numVertices; j++) {System.out.print(adjacencyMatrix[i][j] + " ");}System.out.println();}}
}

邻接表

邻接表是一种数组加链表的结构,每个顶点对应一个链表,链表中存储与该顶点相邻的顶点。

import java.util.LinkedList;public class Graph {private LinkedList<Integer>[] adjacencyList;private int numVertices;public Graph(int numVertices) {this.numVertices = numVertices;adjacencyList = new LinkedList[numVertices];for (int i = 0; i < numVertices; i++) {adjacencyList[i] = new LinkedList<>();}}public void addEdge(int i, int j) {adjacencyList[i].add(j);adjacencyList[j].add(i); // 对于无向图}public void removeEdge(int i, int j) {adjacencyList[i].remove((Integer) j);adjacencyList[j].remove((Integer) i); // 对于无向图}public void printGraph() {for (int i = 0; i < numVertices; i++) {System.out.print("Vertex " + i + ":");for (Integer edge : adjacencyList[i]) {System.out.print(" -> " + edge);}System.out.println();}}
}

常见操作

图的遍历

图的遍历主要有深度优先搜索(DFS)和广度优先搜索(BFS)。

深度优先搜索(DFS)

深度优先搜索是一种遍历图的方法,从一个起始顶点出发,沿着一条路径尽可能深入,然后回溯继续搜索未访问的顶点。

import java.util.Stack;public void depthFirstSearch(int startVertex) {boolean[] visited = new boolean[numVertices];Stack<Integer> stack = new Stack<>();stack.push(startVertex);while (!stack.isEmpty()) {int vertex = stack.pop();if (!visited[vertex]) {visited[vertex] = true;System.out.print(vertex + " ");for (int i : adjacencyList[vertex]) {if (!visited[i]) {stack.push(i);}}}}
}
广度优先搜索(BFS)

广度优先搜索是一种遍历图的方法,从一个起始顶点出发,逐层访问相邻的顶点。

import java.util.LinkedList;
import java.util.Queue;public void breadthFirstSearch(int startVertex) {boolean[] visited = new boolean[numVertices];Queue<Integer> queue = new LinkedList<>();queue.add(startVertex);while (!queue.isEmpty()) {int vertex = queue.poll();if (!visited[vertex]) {visited[vertex] = true;System.out.print(vertex + " ");for (int i : adjacencyList[vertex]) {if (!visited[i]) {queue.add(i);}}}}
}

结论

图是计算机科学中非常重要的数据结构,理解图的基本概念和Java中的实现方法对于解决很多复杂问题都非常有帮助。通过本篇博客的介绍,希望大家对图有一个初步的了解,并能够在实际编程中应用图的相关知识。

如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读!

已经到底啦!!

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

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

相关文章

Unity 使用TextMeshPro实现图文混排

最后实现出的效果是这样的 开始实现 准备两张图 选中图片右键->Create->TextMeshPro->Sprite Asset 然后文件夹内就会出现一个同名的这个文件 新建一个Text Inspector面板 点击最底下的Extra Settings 然后把刚刚创建的SpriteAsset拖过来 放到对应的地方 然后…

富瀚微FH8322 ISP图像调试—BLC校正

1、简单介绍 目录 1、简单介绍 2、调试方法 3、输出结果 富瀚微平台调试有一段时间了&#xff0c;一直没有总结&#xff0c;我们调试ISP的时候&#xff0c;首先一步时确定好sensor的黑电平值&#xff0c;黑电平如果不准&#xff0c;则会影响到后面的颜色及对比度相关模块。…

快消品经销商需要注意哪些仓库管理细节,才能提效降本

仓库管理是快消品经销商必须重视的环节&#xff0c;只有仓库管理做好了&#xff0c;整体效率才能得到提升&#xff0c;成本才能降低&#xff0c;客户订单更快地交付&#xff0c;而在仓库管理中有很多细节需要经销商注意。 01仓库布局与设计&#xff1a;合理的仓库布局可以极大地…

Java17 --- SpringSecurity之OAuth2

一、OAuth2 1.1、使用github以授权码方式 1.1.1、注册应用程序 1.1.2、测试代码 pom依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency> spring…

基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真。利用电压外环PI调节器得到有功 电流指令值结合由负载侧电流检测 到 的无功 电流指令值 &#…

最新版点微同城源码34.7+全套插件+小程序前后端(含安装教程)

模板挺好看的 带全套插件 自己耐心点配置一下插件 可以H5可以小程序 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89394996 更多资源下载&#xff1a;关注我。

嘻嘻我是图床倒霉蛋

嘻嘻花了将近两个小时的时间配了一个小小的图床 手把手教你搭建阿里云图床(PicGoTypora阿里云OSS)&#xff0c;新手小白一看就会-阿里云开发者社区 (aliyun.com) 大体上按照这篇配置就好 七牛云因为测试域名30天到期,用自己的得备案,所以比较麻烦,建议直接上阿里云 我买了一…

股指期货功能

其金融期货的本质&#xff0c;决定了股指期货具有以下几方面特点&#xff1a; &#xff08;1&#xff09;交割方式为现金交割&#xff1b; &#xff08;2&#xff09;股指期货的持有成本较低&#xff1b; &#xff08;3&#xff09;股指期货的保证金率较低&#xff0c;杠杆性…

jrt从量变到质变

又是一个加班的周末&#xff0c;上周把台式机代码和数据库环境弄好了&#xff0c;这周进行大数据测试&#xff0c;直接把标本、标本医嘱、报告、报告结果、药敏结果等数据插入到1亿的规模&#xff0c;跑了一天一夜插入了5000多万个标本&#xff0c;后面接着补剩下的到一亿。 演…

书生·浦语大模型实战营第二期作业六

1、安装环境&#xff1a; 2、安装legent和agentlego&#xff1a; 3、部署apiserver&#xff1a; 4、legent web demo&#xff1a; 5、没搜到&#xff0c;很尴尬&#xff1a; 6、自定义工具&#xff1a; 7、智能体“乐高”&#xff1a; 8、智能体工具&#xff0c;识别图片&#…

Java文件/文件夹的新增/删除/递归遍历

获取File对象 这里的字符串可以乱写&#xff0c;但是如果不存在后续的操作也会失败 // 获取抽象的File对象&#xff08;文件或者目录&#xff0c;不一定真实存在&#xff09;File file1 new File("D:\\2_WorkSpace\\qcbyProject\\shixun\\collection-test\\src\\FileTes…

youlai-boot项目的学习—工程构建与运行

开发环境 系统:mac OS Ventura 13.2.1 终端: item2 Homebrew: 4.3.5 IDE: IntelliJ IDEA 2024.1.1 (Ultimate Edition) 代码分支 仓库&#xff1a;https://gitee.com/youlaiorg/youlai-boot.git 分支&#xff1a; master commit: 9a753a2e94985ed4cbbf214156ca035082e02723 …

《全网首发》平衡三进制图灵机的构建

PS:以下内容均为本人原创&#xff0c;未经授权及许可&#xff0c;严禁引图、转载或加工&#xff0c;违者必究。 ————2024年6月13号 1、图灵机的概述 图灵机&#xff08;Turing machine&#xff09;是一种理论计算模型&#xff0c;由英国数学家阿兰图灵&#xff08;Alan T…

vue-饼形图-详细

显示效果 代码 <template> <div style"height: 350px;"> <div :class"className" :style"{height:height,width:width}"></div> </div> </template> <script> import * as echarts from echarts; req…

fiddler打开后,requests无法使用

Fiddler实用小技巧 错误情况 打开fiddler后&#xff0c;requests无法请求 requests.exceptions.ProxyError: HTTPSConnectionPool(hosth5api.m.taobao.com, port443): 说明 其实这是一个很小的坑&#xff0c;确也是一个很常见的坑。 在打开fiddler后&#xff0c;根据fiddle…

LaTeX 学习 第1节 数学模型概说

----用教授的方式学习 https://download.csdn.net/download/weixin_38135241/89416392 LaTex 安装包 LaTeX 有多种工作模式&#xff1a;输入一行文字时我们在水平模式&#xff0c;在水平模式上&#xff0c;文字、符号等各种排版元素&#xff0c;也就是各种盒子&#xff0c;都…

厂里资讯之自媒体文章自动审核

自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的内容&#xff08;文本内容和图片&#xff09; 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…

DeepDriving | 经典的目标检测算法:CenterNet

本文来源公众号“DeepDriving”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;经典的目标检测算法&#xff1a;CenterNet 1 前言 CenterNet是2019年发表的一篇文章《Objects as Points》中提出的一个经典的目标检测算法&#xf…

VBA_NZ系列工具NZ08:图表添加标签工具

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

micro SD控制——zynq(未完)

文章目录 一、SD基础知识二、SD卡控制器三、文件系统&#xff08;FATFS&#xff09;四、 SD卡控制任务&#xff1a;4.1 txt文本任务&#xff1a;4.1.1 硬件部分&#xff1a;4.1.2 软件部分&#xff1a;1.板级支持包中加入FATFS文件系统2.C设计 一、SD基础知识 1.SD卡的类型、协…