图面试专题

一、概念

和二叉树的区别:图可能有环

常见概念

  1. 顶点(Vertex): 图中的节点或点。
  2. 边(Edge): 顶点之间的连接线,描述节点之间的关系。
  3. 有向图(Directed Graph): 边具有方向性的图,边有箭头表示方向。
  4. 无向图(Undirected Graph): 边没有方向性的图。
  5. 路径(Path): 顶点序列,通过边连接的顶点序列。
  6. 回路(Cycle): 闭合的路径,起点和终点相同的路径。
  7. 连通图(Connected Graph): 图中任意两个顶点之间都存在路径的图。
  8. 强连通图(Strongly Connected Graph): 有向图中任意两个顶点之间都存在双向路径的图。
  9. 连通分量(Connected Component): 无向图中的极大连通子图。
  10. 树(Tree): 无环连通图,任意两个节点都有唯一路径。
  11. 森林(Forest): 多个不相交树的集合。
  12. 度(Degree): 顶点的度是指与该顶点相关联的边的数量。
  13. 权重(Weight): 边或者顶点上的数值,表示边的代价或者顶点的属性。

邻接矩阵

ABCD
A0正无穷58
B正无穷09正无穷
C5904
D8正无穷40

邻接表法

Nodeweight
AC5
AD8
CB9
CD4
BC9
DA8
DC4

二、算法题

1、套路模板


/*** @author jeb_lin* 22:27 2023/11/29*/
public class Node {public int value; // 可以改成 Stringpublic int in;// 入度public int out;// 出度public ArrayList<Node> nexts; // 多个后继节点public ArrayList<Edge> edges; // 多条边,该节点指出去的public Node(int value){this.value = value;this.in = 0;this.out = 0;this.nexts = new ArrayList<>();this.edges = new ArrayList<>();}public int getValue() {return value;}public void setValue(int value) {this.value = value;}public int getIn() {return in;}public void setIn(int in) {this.in = in;}public int getOut() {return out;}public void setOut(int out) {this.out = out;}public ArrayList<Node> getNexts() {return nexts;}public void setNexts(ArrayList<Node> nexts) {this.nexts = nexts;}public ArrayList<Edge> getEdges() {return edges;}public void setEdges(ArrayList<Edge> edges) {this.edges = edges;}
}

/*** @author jeb_lin* 22:27 2023/11/29*/
public class Edge {public Node from;public Node to;public int weight;public Edge(Node from, Node to, int weight) {this.weight = weight;this.from = from;this.to = to;}// 复写下面这俩,是为了放入Set的时候能正确去重@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null || !(obj instanceof Edge)) {return false;}Edge edge = (Edge) obj;return this.weight == edge.weight && Objects.equals(edge.from, this.from) && Objects.equals(edge.to, this.to);}@Overridepublic int hashCode() {return this.weight * this.from.hashCode() * this.to.hashCode();}public Node getFrom() {return from;}public void setFrom(Node from) {this.from = from;}public Node getTo() {return to;}public void setTo(Node to) {this.to = to;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}
}

/*** @author jeb_lin* 22:26 2023/11/29*/
public class Graph {public HashMap<Integer,Node> nodes; // 该图上面的所有Node,nodeVal -> Nodepublic HashSet<Edge> edges; // 该图上面的所有边public Graph(){this.nodes = new HashMap<>();this.edges = new HashSet<>();}public HashMap<Integer, Node> getNodes() {return nodes;}public void setNodes(HashMap<Integer, Node> nodes) {this.nodes = nodes;}public HashSet<Edge> getEdges() {return edges;}public void setEdges(HashSet<Edge> edges) {this.edges = edges;}
}

2、二维数组转化成图

012备注
0015Node0->Node1 ,weight=5
1123Node1->Node2 ,weight=3
2027Node0->Node2 ,weight=7

/*** 把二维数组转换成图* [*      [0,1,5], // 表示 node0 -> node1 ,weight = 5*      [1,2,3],*      [0,2,7]* ]** @param matrix* @return*/public static Graph createGraph(int[][] matrix) {Graph graph = new Graph();HashMap<Integer, Node> nodes = new HashMap<>(); // 该图上面的所有Node,nodeVal -> NodeHashSet<Edge> edges = new HashSet<>(); // 该图上面的所有边graph.setEdges(edges);graph.setNodes(nodes);for (int i = 0; i < matrix.length; i++) {int[] row = matrix[i];if (!nodes.containsKey(row[0])) {nodes.put(row[0], new Node(row[0]));}if (!nodes.containsKey(row[1])) {nodes.put(row[1], new Node(row[1]));}Node from = nodes.get(row[0]);Node to = nodes.get(row[1]);from.setOut(from.getOut() + 1);to.setIn(to.getIn() + 1);from.getNexts().add(to);Edge edgeTemp = new Edge(from, to, row[2]);from.getEdges().add(edgeTemp);if(!edges.contains(edgeTemp)){edges.add(edgeTemp);}}return graph;}public static void main(String[] args) {int[][] arr = {{0, 1, 5}, {1, 2, 3}, {0, 2, 7}};Graph graph = createGraph(arr);System.out.println("ok");}

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

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

相关文章

BUUCTF-pwn-ciscn_2019_ne_51

简单查看保护&#xff1a; 32为程序没有canary没有PIE&#xff0c;应该是简单的栈溢出。我们照着这个思路去找溢出点在哪&#xff0c;运行下程序看看什么情况&#xff1a; 程序上来是输入一个密码验证。随便输入下错误直接退出。因此我们需要到IDA中看看怎么回事&#xff1a; 主…

Linux详解——安装JDK

目录 一、下载jdk 二、tar包安装 三、rpm包安装 一、下载jdk 1.下载jdk https://www.oracle.com/technetwork/java/javase/downloads/index.html 2.通过CRT|WinSCP工具将jdk上传到linux系统中 二、tar包安装 # 1.将JDK解压缩到指定目录 tar -zxvf jdk-8u171-linux…

报错解决:You may need an additional loader to handle the result of these loaders.

报错信息如下 vue 项目 Module parse failed: Unexpected token (1:9) File was processed with these loaders:* ./node_modules/vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js* ./node_modules/babel-loader/lib/index.js* ./node_modules/eslint-loader/in…

【R语言】——相关性分析和热图绘制

本期介绍了利用R语言进行相关性分析和数据的可视化的方法。 一、什么是相关性分析&#xff1f; 相关性分析是指对两个或多个具备相关性的变量元素进行分析&#xff0c;从而衡量两个变量因素的相关密切程度。相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。…

矩阵代数与MATLAB实现(特征值、广义特征值、酋矩阵、)

矩阵代数的相关知识 目录 一、特征值与特征向量 1、特征值与特征向量 2、MATLAB计算 二、广义特征值与广义特征向量 1、广义特征值与广义特征向量 2、MATLAB计算 三、酋矩阵 1、酋矩阵 2、MATLAB计算 四、未完待续 总结 提示&#xff1a;以下是本篇文章正文内容&…

网工内推 | 中高级网工,IE认证优先,带薪年假,五险一金

01 敏于行&#xff08;北京&#xff09;科技有限公司 招聘岗位&#xff1a;高级网络开发工程师 职责描述&#xff1a; 1、负责设计、参与数字身份安全中网络安全模块相关项目&#xff08;零信任SDP、VPN等&#xff09;&#xff1b; 2、深入研究和理解网络底层协议和通信机制&…

Aruba无线控制器新增加AP

1、将网线连接上AP的Eth端口&#xff0c;console线也连接上console口 2、在console后台可以看到AP获取到的IP地址 3、确认网络可以联通&#xff0c;通过https访问web界面 AP205默认账号密码&#xff1a;admin AP505账号为admin&#xff0c;密码为设备SN 4、右上角点击"维…

手势识别4:C/C++实现手部检测和手势识别(含源码下载)

手势识别4&#xff1a;C/C实现手部检测和手势识别(含源码下载) 目录 手势识别4&#xff1a;C/C实现手部检测和手势识别(含源码下载) 1. 前言 2. 手势识别模型&#xff08;YOLOv5&#xff09; &#xff08;1&#xff09;手势识别模型训练 &#xff08;2&#xff09;将Pyto…

Mac单独修改应用语言

方法1: 方法2: defaults write com.microsoft.Excel AppleLanguages ("zh-cn") defaults write com.microsoft.Word AppleLanguages ("zh-cn")参考&#xff1a;https://www.zhihu.com/question/24976020

Python中对数组连续赋值的问题

问题描述 在python中&#xff0c;首先用两个等号对两个数组进行初始化并赋值。之后&#xff0c;对任何一个数组进行赋值&#xff0c;都会将其赋予相同值。 import numpy as np Array1 Array2 np.empty(2) Array1[0],Array2[0]70,80 print(Array1[0],Array2[0])80.0 80.0 …

配电网重构单时段+多时段(附带matlab代码)

配电网重构单时段多时段 对于《主动配电网最优潮流研究及其应用实例》的基本复现 简介&#xff1a;最优潮流研究在配电网规划运行中不可或缺&#xff0c;且在大量分布式能源接入的主动配电网环境下尤为重要。传统的启发式算法在全局最优解和求解速度上均无法满足主动配电网运行…

群晖安装portainer

一、下载镜像 打开【Container Manager】 ,搜索portainer&#xff0c;双击【6053537/portainer-ce】下载汉化版本 二、创建映射文件夹 打开【File Station】&#xff0c;在docker目录下创建【portainer】文件夹 三、开启SSH 群晖 - 【控制面板】-【终端机和SNMP】 勾选【启动…