图论入门篇

本文介绍了图论的基本概念,包括图、顶点、边和度的定义。接着探讨了图的两种常见存储方式:邻接矩阵和邻接表,尤其在处理稀疏图时邻接表的优势。最后,讲解了深度优先搜索(DFS)和广度优先搜索(BFS)这两种图形结构的搜索算法,用于寻找最短路径和判断可达性。
摘要由CSDN通过智能技术生成
相关定义

在这里插入图片描述
由顶点和边组成的结构
顶点 图中的元素节点,如上图中的A,B,C等
边(弧) 顶点之间的关系连线,如果边是有向(或者点对有序的),则图也会被叫做有向图
边的表示(A, B),同时也说明A,B邻接
顶点邻接的顶点数目

图的存储方式

在这里插入图片描述

1.邻接矩阵

对于上边的有向图,可以通过邻接矩阵的方式来表示:
在这里插入图片描述
当图中顶点的度比较低时,我们说图是稀疏的,对应的矩阵也被称为稀疏矩阵

2.邻接表

当图是稀疏的时候,可以通过邻接表来表示:
在这里插入图片描述
对于每一个顶点,使用一个表来存放所有邻接的顶点

3. 图形结构的搜索
起点 0 1 0
0 0 0 0
0 0 1 0
0 1 终点 0
0 0 0 1

对应的邻接矩阵为:

/*
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
 */
3.1 深度优先搜索 DFS

从某个顶点A开始,遍历节点A的邻接顶点,在遍历过程中,递归调用深度优先搜索。
计算起点到终点的最短路径:

public class DepthFirstSearch {
   
    private static class Point {
   
        int x;
        int y;

        Point(int x, int y) {
   
            this.x = x;
            this.y = y;
        }

        @Override
        public boolean equals(Object o) {
   
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Point point = (Point) o;
            return x == point.x &&
                    y == point.y;
        }

        @Override
        public int hashCode() {
   
            return Objects.hash(x, y);
        }

        @Override
        public String toString() {
   
            return "Point{" +
                    "x=" + x +
                    ", y=" + y +
                    '}';
        }
    }

    // 表示5行4列
    static int m = 5, n = 4;

    // 用于保存顶点是否邻接
    private static int[][] values = new int[m][n];

    /// 用于标记顶点是否已经遍历
    private static boolean[][] marks 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值