2-1 图的分类

图是一个用线 或 边连接在一起的顶点的集合,可以说,图是有限 顶点V 和 边E 的有序对。顶点(Vertex),边(Edge)

图a中的边没有方向,称为无向图。图b中边存在方向称为有向图

1.1(a)所示的图可以表示为 G1(V, E)。其中顶点集合 V(G1) = { 1, 2, 3, 4, 5, 6 },集合

中的元素为顶点(用序号代表,在其他图中,顶点集合中的元素也可以是其他标识顶点的符号,

如字母 A、B、C 等);

边的集合为:E(G1) = { (1, 2), (1, 3), (2, 3), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (4, 5) }

​​

图 1.1(b)所示的图可以表示为 G2(V, E),其中顶点集合 V(G2) = { 1, 2, 3, 4, 5, 6, 7 },集合中的元素也为顶点的序号;

边的集合为:

E(G2) = { <1, 2>, <2, 3>, <2, 5>, <2, 6>, <3, 5>, <4, 3>, <5, 2>, <5, 4>, <6, 7> }。

在上述边的集合中,每个元素为一对顶点构成的有序对(用尖括号括起来),

表示从点 u 到顶点 v 的有向边(directed Edge)

权值(weight):某些图的边具有与它相关的数,称为权值。

下列图示分别表示:无向有权图,有向有权图

上图a中:所示的无向网可表示为 G1(V, E),其中顶点集合 V(G1) = { 1, 2, 3, 4, 5, 6, 7 };

边的集合为:

E(G1) = { (1, 2, 28), (1, 6, 10), (2, 3, 16), (2, 7, 14), (3, 4, 12), (4, 5, 22), (4, 7, 18), (5, 6, 25), (5, 7, 24) }。

在边的集合中,每个元素的第 3 个分量表示该边的权值。

所以依据图的有无方向和权值可以分为4类:

1.无向无权图

2.有向无权图

3.无向有权图

4.有向有权图

2-2 图的基本概念

顶点的度(degree):对于无向图来说,一个顶点的度就是这个顶点的相邻的边的数量。如第一张图a中点1的度就是 2 。

简单图:没有自环边,没有平行边

子图:例如,图 1.8(a)、(b)所示的无向图都是图 1.1(a)所示的无向图 G1的子图

联通图和非联通图:

在无向图中,若从顶点 u 到 v 有路径,则称顶点 u 和 v是连通的(connected)。

如果无向图中任意一对顶点都是连通的,则称此图是连通图(connected graph);

相反,如果一个无向图不是连通图,则称为非连通图(disconnected graph)。

如果一个无向图不是连通的,则其极大连通子图称为连通分量(connected component)

树是一种无环图,任意结点都可以看做是根节点。联通的无环图是树

生成树(Spanning Tree):一个无向连通图的生成树是它的包含所有顶点的极小连通子图,这里所谓的极小就是边的数目极小。

如果图中有 n 个顶点,则生成树有 n-1 条边。一个无向连通图可能有多个生成树。

图1.1(a) 所示的无向图 G1的一个生成树如图 1.9(a)所示。为了更形象地表示这个生成树,

在图 1.9 中,图(b)把它画成了以顶点 1 为根结点的树,图(c)把它画成了以顶点 3 为根结点的树。

2-3 图的基本表示:邻接矩阵

在邻接矩阵存储方法中,除了一个记录各个顶点信息的顶点数组外,还有一个表示各个顶点

之间关系的矩阵,称为邻接矩阵(adjacency matrix)。两顶点相邻则为1, 不相邻则为 0

其中 V = 7 表示顶点的数量, E = 9 表示边的数量

欢迎关注工纵号:不止于编程,更多干货。​

练习的是简单图,不包含自环边和平行边

java代码实现

import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Scanner;//只是处理简单的图public class AdjMatrix {private int V;  // 图的顶点的数量private int E;  // 图的边的数量private int[][] adj;  // 邻接矩阵public AdjMatrix(String filename) {File file = new File(filename);try {// 读取文件Scanner scanner = new Scanner(file);V = scanner.nextInt();// 判断顶点数量是否有误if (V < 0) throw new IllegalArgumentException("V 必须是个不为负数的数值");adj = new int[V][V];  // 创建二维矩阵E = scanner.nextInt();if (V < 0) throw new IllegalArgumentException("E 必须是个不为负数的数值");for (int i = 0; i< E; i++) {int a = scanner.nextInt();validateVertex(a);int b = scanner.nextInt();validateVertex(b);// 判断是否是自环边if (a == b) throw new IllegalArgumentException("不允许存在自环边");if (adj[a][b] == 1) throw new IllegalArgumentException("不允许存在平行边");adj[a][b] = 1;adj[b][a] = 1;}} catch (IOException e) {e.printStackTrace();}}private void validateVertex(int v) {if (v < 0 || v > V) {throw new IllegalArgumentException("输入的数值" + v +"不合法");}}// 获取指定结点相邻的结点public ArrayList adj(int v){validateVertex(v);ArrayList res = new ArrayList<>();for (int i = 0; i < V; i++) {  // 顶点的数量if (adj[v][i] == 1) {res.add(i);}}return res;}// 获取指定结点的度,即相邻的结点的数量public int degree(int v) {return adj(v).size();}public int V() {return V;}public int E() {return E;}public boolean hasEdge(int x, int y) {  // 依据两个顶点判断边是否存在validateVertex(x);validateVertex(y);return adj[x][y] == 1;}public String toString() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(String.format("V = %d, E = %d ", V, E)); // 打印出矩阵for (int i =0; i< V; i++) {for (int j = 0; j < V; j++) {stringBuilder.append(String.format("%d ", adj[i][j]));}stringBuilder.append("");}return stringBuilder.toString();}public static void main(String[] args) {AdjMatrix adjMatrix = new AdjMatrix("g.txt");System.out.println(adjMatrix);//V = 7, E = 9 //0 1 0 1 0 0 0 //1 0 1 0 0 0 1 //0 1 0 1 0 1 0 //1 0 1 0 1 0 0 //0 0 0 1 0 1 0 //0 0 1 0 1 0 1 //0 1 0 0 0 1 0 System.out.println(adjMatrix.adj(2).toString());System.out.println(adjMatrix.degree(2));}}

欢迎关注工纵号:不止于编程,更多干货。​


一个aov网用邻接矩阵表示_一起看看啥是图论算法-第一期:图的基本表示相关推荐

  1. 一个aov网用邻接矩阵表示_第6章+图习题解析

    第六章图习题解析1 一.选择题 1.设无向图的顶点个数为n,则该无向图最多有条边. A.n-1 B.n(n-1)/2 C.n(n+1)/2 D.0 E.n2 2.在下列两种求图的最小生成树的算法中,算 ...

  2. 一个aov网用邻接矩阵表示_关注讲述我和朱婷7年7个故事,见证一个明星代表的诞生...

    传递女排精神,传播运动快乐! 欢迎关注 我爱女排,这里是最优质的排球互动平台. 编者按 全国人大的代表通道,一身正装的朱婷面对镜头,在全国观众面前谈女排精神,落落大方.此后,她经过深思熟虑后又提出人大 ...

  3. 一个aov网用邻接矩阵表示_图习题及参考答案

    第7章习题 一.单项选择题 1.在无向图中定义顶点的度为与它相关联的()的数目. A. 顶点 B. 边 C. 权 D. 权值 2.在无向图中定义顶点 v i与v j之间的路径为从v i到达v j的一个 ...

  4. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

  5. java写一个外网访问的接口_不是吧不是吧!随便写的一个API竟获得 2.5 亿的访问量...

    简评:作者随手在 Stackoverflow 回答了一个问题,几个月之后,竟发现这个回答带来了 2.5 亿次的 API 访问.作者还因此成立了公司专门运作这个 API. 以下我仅代表原作者. 推广很难 ...

  6. 图论 —— AOV 网与拓扑排序

    [AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...

  7. 有向无环图——AOV网(拓扑排序)

    有向无环图:无环的有向图,简称DAG图(Directed Acycline Graph) 有向无环图常用来描述一个工程或系统的进行过程.(通常吧计划.施工.生产.程序流程等当成是一个工程) 一个工程可 ...

  8. 邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路

    题目链接 743. 网络延迟时间 题目描述 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源 ...

  9. dijkstra邻接表_[力扣743] 带权邻接表的单源最短路

    题目链接 743. 网络延迟时间 题目描述 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源 ...

最新文章

  1. Eigen库使用之矩阵的最大/小值及其位置
  2. python使用imbalanced-learn的AllKNN方法进行下采样处理数据不平衡问题
  3. 【133天】尚学堂高淇Java300集视频精华笔记(71-72)
  4. oracle odi 资料档案库访问期间出现未分类的异常错误,oracle学习_基本语法
  5. TIOBE 4 月编程语言排行榜:Python 让位,老将 C++ 夺回前三,PHP 惨遭抛弃!
  6. python语言磁力搜索引擎源码公开,基于DHT协议,十二分有技术含量的技术博客...
  7. 3、检验程序模块化指标---模块化系数-----labview宝典
  8. 免费的固定资产管理软件|免费的固定资产管理软件哪个好?
  9. android 盒子gpu,挑选电视盒子时CPU和GPU哪个更重要?
  10. SQL 计算月同比、月环比
  11. werfault.exe出现的原因与解决办法以及werfault.exe 该内存不能为written如何解决?
  12. 歌声合成理论教程(1)
  13. 首发:Meltdown漏洞分析与实践
  14. 怎样看股市K线图指标之成本均线指标CYC
  15. Linux 开机提示kernel panic...解决方法
  16. 【Linux】gcc编译器下载与手动安装
  17. JS逆向|使用pyexecjs库替换加密字符串
  18. 【Java】检查二叉树是否平衡。
  19. Hinton:胶囊网络的专利是我的了
  20. 利用css做三线表格,如何快速制作三线表格式数据

热门文章

  1. Android监视返回键
  2. Jquery Mobile --小知识
  3. java并发编程(2)——wait和notify解析
  4. 【WinCE】SD card技术了解并WINCE下SDHC驱动开发(updated)
  5. 在内网服务器中获得真正的客户端ip的方法
  6. swoole process进程 多分发
  7. laravel CURD 查询构造器
  8. 系统中编译安装ZLMediaKit的步骤
  9. ActiveX控件制作与发布,如何将您的C++程序嵌入到浏览器中
  10. struts2 ajax请求发现执行action两次原因