【数据结构与算法学习】图的快速入门案例
一、图的定义及其相关概念的介绍
定义:图是由顶点的有穷非空集合和顶点之间边的集合组成,表示为G(V,E),其中G表示一个图,V是图G中顶点的集合,E是图G中边的集合。
无向图:顶点与顶点之间的连接没有方向,比如v1-v2,既可以是v1->v2,也可以是v2->v1。(上图即为) 有向图:顶点与顶点之间的连接是有方向的,比如v1->v2,就明确指定顶点间的方向是从v1指向v2的。(带箭头) 带权图:顶点与顶点的连接的边上带上一个权值的无向图。
二、图的表示方式
图的表示方式有两种:邻接矩阵、邻接表 邻接矩阵:用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。 (点点之间如果存在连接则为1,否则为0)
三、快速入门案例(简单代码实现)
案例说明:在这个案例中,从视觉上的无向图用简单代码的方式呈现出图的邻接矩阵。通过输入图的结点数和结点名称,以及结点间的连接情况,来得到一个图的邻接矩阵。
package com.datou.graph; import java.util.ArrayList; import java.util.Arrays; /** * @author datou * @data 2020/8/11 - 18:01 * @target 图的表示 * 要求:输入结点及结点数,各个边的连接情况,输出邻接矩阵 */ public class Graph { //声明图的结点,用动态数组表示 private ArrayList<String> nodeList; //声明邻接矩阵 private int[][] arr; //输入结点数,初始化参数 public Graph(int n){ nodeList = new ArrayList<String>(n); arr = new int[n][n]; } /** * 插入结点 * @param nodeValue */ public void insertNode(String nodeValue){ nodeList.add(nodeValue); } /** * 无向图添加边,连接则为1,否则则为0 * @param v1 结点1 * @param v2 结点2 * @param weight 权值 */ public void insertArr(int v1, int v2, int weight){ arr[v1][v2] = weight; arr[v2][v1] = weight; } /** * 显示图 */ public void showGraph(){ for (int[] link : arr){ System.out.println(Arrays.toString(link)); } } public static void main(String[] args) { int n = 5; Graph graph = new Graph(n); String[] nodeList = { "A","B","C","D","E"}; //循环插入结点值 for (String nodeValue : nodeList){ graph.insertNode(nodeValue); } //A-B A-C B-C B-D B-E graph.insertArr(0,1,1); graph.insertArr(0,2,1); graph.insertArr(1,2,1); graph.insertArr(1,3,1); graph.insertArr(1,4,1); graph.showGraph(); } } /**结果: [0, 1, 1, 0, 0] [1, 0, 1, 1, 1] [1, 1, 0, 0, 0] [0, 1, 0, 0, 0] [0, 1, 0, 0, 0] **/
教程视频: 😄希望以上的分享对你有所帮助!若有错误,请小伙伴们指出!