【数据结构与算法学习】图的快速入门案例

一、图的定义及其相关概念的介绍

定义:图是由顶点的有穷非空集合和顶点之间边的集合组成,表示为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]
**/

教程视频: 😄希望以上的分享对你有所帮助!若有错误,请小伙伴们指出!

经验分享 程序员 微信小程序 职场和发展