图论基础入门

【图论——第一讲】图论基础以及图的储存 ฅ(๑˙o˙๑)ฅ 大家好, 欢迎大家光临我的博客:面向阿尼亚学习算法学习笔记系列持续更新中~ 文章目录 一、前言推荐大家一个图形编译器[很好用](https://csacademy.com/ap... 阅读详情

一.图论与图

1.什么是图论

在这里插入图片描述
图论(英语:Graph theory),是组合数学的一个分支,和其他数学分支,如群论、矩阵论、拓扑学有着密切关系。

2.什么是图

图是图论的主要研究对象。图是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系。
在这里插入图片描述

3.经典图论问题和应用
1.经典问题
  1. 四色问题
  2. 柯尼斯堡七桥问题
  3. 最小生成树问题
  4. 路径问题
2.应用

在这里插入图片描述

4.经典图论算法
  1. Prim算法
  2. Krusk算法
  3. Dijkstra算法
  4. Bellman-Ford算法

二.图的分类

1.无向图

无向图指的是图的边没有方向的分别,通常可以认为无向图实质上是同时拥有两个方向的有向图。
在这里插入图片描述

2.有向图

有向图指的是图的边有方向的分别。
在这里插入图片描述

3.无权图

无权图指的是图的边不带权重。
在这里插入图片描述

4.带权图

带权图指的是图的边拥有权重。
在这里插入图片描述

5.稀疏图

在这里插入图片描述
稀疏图指的是对于顶点总数来说,每个顶点的边远少于顶点总数。

6.稠密图与完全图

当大部分顶点的边数接近于顶点总数时可被称为稠密图;当每个顶点的边都链接了其余的节点,则被称为完全图。
在这里插入图片描述

三.图的连通性

1.连通性

在这里插入图片描述
上图中,拥有三个图的集合,它们之间并不是联通的,但是自身却是连通的。所以图具有连通性。

2.带环边与平行边

对于简单图来说,顶点与顶点之间只含有一条边;而对于复杂图来说,顶点之间的边有可能会形成自环或平行边:
在这里插入图片描述

自环边可以用来表示一个导向自身的路径,而平行边则可以表示导向其他顶点的多个路径。

四.图的表示

1.邻接矩阵

我们可以使用一个 V 乘 V 的布尔
二维数组来表示图。 当顶点 v 和顶点 w 之间有相连接的边
时, 定义 v 行 w 列的元素值为 true, 否则为
false。
在这里插入图片描述

  • Graph1
/**
 * @Auther: ARong
 * @Date: 2020/2/29 11:34 上午
 * @Description: 使用邻接矩阵实现的图结构
 */
public class Graph1 {
    private int n; // 顶点数
    private int m; // 边数
    private boolean directed; // 是否为有向图
    private boolean[][] graph; // 二维boolean数组表示的图结构

    public Graph1(int n, boolean directed) {
        assert n >= 0;
        this.n = n;
        this.directed = directed;
        this.m = 0;
        graph = new boolean[n][n];
    }

    /*
     * @Author ARong
     * @Description 向节点间添加一条边
     * @Date 2020/2/29 11:39 上午
     * @Param [v, m]
     * @return void
     **/
    public void addEdge(int v, int m) {
        assert v >= 0 && v < n;
        assert m >= 0 && m < n;
        // 如果有这条边则不添加
        if (hasEdge(v, m)) {
            return;
        }
        graph[v][m] = true;
        // 如果是无向图,则还需要在另一方添加关系
        if (!directed) {
            graph[m][v] = true;
        }
        // 边数增加
        m++;
    }

    /*
     * @Author ARong
     * @Description 判断v,m是否存在边
     * @Date 2020/2/29 11:42 上午
     * @Param [v, m]
     * @return boolean
     **/
    private boolean hasEdge(int v, int m) {
        return graph[v][m];
    }
}

使用邻接矩阵来表示图有许多缺点,例如:

  1. 空间需要提前声明,如果图的节点很多,那么需要声明的空间太大,且不能动态拓展
  2. 不能表示平行边和自环关系
2.邻接表

我们可以使用一个以顶点为索引的列表数组, 其中的每个元素都是和该顶点相邻的顶点列表。

使用邻接表可以优化图的空间大小,但是一些操作的时间会比邻接矩阵实现的图耗费时间多。

在这里插入图片描述
在这里插入图片描述

  • Graph2
/**
 * @Auther: ARong
 * @Date: 2020/2/29 11:55 上午
 * @Description: 使用邻接表实现的图结构
 */
public class Graph2 {

    private int n; // 顶点数
    private int m; // 边数
    private boolean directed; // 是否为有向图
    private List<List<Integer>> graph; // 二维链表

    public Graph2(int n, boolean directed) {
        assert n >= 0;
        this.n = n;
        this.directed = directed;
        this.m = 0;
        graph = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            // 初始化
            graph.add(new ArrayList<>());
        }
    }


    /*
     * @Author ARong
     * @Description 向v,m之间添加一条边
     * @Date 2020/2/29 12:01 下午
     * @Param [v, m]
     * @return void
     **/
    public void addEdge(int v, int m) {
        assert v >= 0 && v < n;
        assert m >= 0 && m < n;
        // 如果有这条边则不添加
        if (hasEdge(v, m)) {
            return;
        }
        graph.get(v).add(m);
        // 如果是无向图,则还需要在另一方添加关系
        if (!hasEdge(v, m) && !directed) {
            graph.get(m).add(n);
        }
        // 边数增加
        m++;
    }

    /*
     * @Author ARong
     * @Description 判断m,v是否存在边
     * @Date 2020/2/29 11:58 上午
     * @Param [v, m]
     * @return boolean
     **/
    private boolean hasEdge(int v, int m) {
        List<Integer> list = graph.get(v);
        for (Integer node : list) {
            if (node == m) {
                return true;
            }
        }
        return false;
    }

}

在这里插入图片描述

五.图的基本算法

0.基本代码框架

以下是无向图结构的基本代码框架,一下算法实现基于该代码框架

/**
 * @Auther: ARong
 * @Date: 2020/3/1 11:27 上午
 * @Description: 使用邻接表实现的无向图
 */
public class UndirectedGraph {
    // 顶点数量
    private int vertexNum;
    // 顶点边数
    private int edgeNum;
    // 邻接表
    private List<List<Integer>> adj;
    // 顶点信息
    private List<String> vertexInfo;

    /*
     * @Author ARong
     * @Description 传入节点信息构造图基本数据
     * @Date 2020/3/1 11:29 上午
     * @Param [vertexInfo]
     * @return
     **/
    public UndirectedGraph(List<String> vertexInfo) {
        this.vertexInfo = vertexInfo;
        this.vertexNum = vertexInfo.size();
        // 初始化图
        adj = new ArrayList<>();
        for (int i = 0; i < vertexNum; i++) {
            // 构造每一个顶点的连接对象
            adj.add(new LinkedList<>());
        }
    }

    public UndirectedGraph(List<String> vertexInfo, int[][] edges) {
        this(vertexInfo);
        // 额外构造边信息
        for (int[] twoVertex : edges) {
            addEdge(twoVertex[0], twoVertex[1]);
        }
    }

    public int vertexNum() {
        return vertexNum;
    }

    public int edgeNum() {
        return edgeNum;
    }

    /*
     * @Author ARong
     * @Description 添加边
     * @Date 2020/3/1 11:31 上午
     * @Param [i, j]
     * @return void
     **/
    public void addEdge(int i, int j) {
        adj.get(i).add(j);
        adj.get(j).add(i);
        edgeNum++;
    }
    // 不需要set,所以不用返回List,返回可迭代对象就够了
    public Iterable<Integer> adj(int i) {
        return adj.get(i);
    }

    /*
     * @Author ARong
     * @Description 获取第i个顶点的数据
     * @Date 2020/3/1 11:32 上午
     * @Param [i]
     * @return java.lang.String
     **/
    public String getVertexInfo(int i) {
        return vertexInfo.get(i);
    }

    /*
     * @Author ARong
     * @Description 获取第i个顶点的边数
     * @Date 2020/3/1 11:32 上午
     * @Param [i]
     * @return int
     **/
    public int degree(int i) {
        return adj.get(i).size();
    }

    /*
     * @Author ARong
     * @Description 获取顶点中最大的边数
     * @Date 2020/3/1 11:33 上午
     * @Param []
     * @return int
     **/
    public int maxDegree() {
        int max = 0;
        for (int i = 0;i < vertexNum;i++) {
            if (degree(i) > max) {
                max = degree(i);
            }
        }
        return max;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(vertexNum).append("个顶点, ").append(edgeNum).append("条边:\n");
        for (int i = 0; i < vertexNum; i++) {
            sb.append(i).append(": 【").append(adj.get(i)).append("】\n");
        }
        return sb.toString();
    }
}
1.深度优先遍历
  /*
     * @Author ARong
     * @Description 对图进行深度优先遍历
     * @Date 2020/3/1 11:45 上午
     * @Param []
     * @return java.util.List<java.lang.Integer>
     **/
    private void dfs(int i, boolean[] visited) {
        visited[i] = true;
        // 获取到i所连接的节点列表
        Iterator<Integer> iterator = adj(i).iterator();
        while (iterator.hasNext()) {
            Integer v = iterator.next();
            if (!visited[v]) {
                // v没有被访问过,继续搜索
                dfs(v, visited);
            }
        }
    }
2.求解连通量
 /*
     * @Author ARong
     * @Description 获取图的连通分量
     * @Date 2020/3/1 12:23 下午
     * @Param []
     * @return java.util.List<java.lang.Integer>
     **/
    public int ccount() {
        int ccount = 0;
        // 初始化访问数组,默认都是未访问过
        boolean[] visited = new boolean[vertexNum];
        // 获取图的邻接表
        for (int i = 0; i < adj.size(); i++) {
            if (!visited[i]) {
                // 在未访问过的节点开始dfs
                dfs(i, visited);
                ccount++;
            }
        }
        return ccount;
    }
3.判断两个顶点是否连通
/*
     * @Author ARong
     * @Description 判断两个节点是否相互连通
     * @Date 2020/3/1 12:37 下午
     * @Param [a, b]
     * @return boolean
     **/
    private boolean isConnected(int a, int b) {
        // 先对a进行深度优先遍历,标示遍历过的节点,若此时b没有被标示到说明不连通
        boolean[] visited = new boolean[vertexNum];
        dfs(a, visited);
        return visited[b];
    }
4.寻找连通路径
/*
     * @Author ARong
     * @Description 找到a与b之间的一条连通路径
     * @Date 2020/3/2 9:49 上午
     * @Param [a, b]
     * @return java.util.List<java.lang.Integer>
     **/
    public List<Integer> findPath(int a, int b) {
        // 判断是否连通
        if (!isConnected(a, b)) {
            return null;
        }
        // 连通,通过dfs搜索,并使用数组记录路径
        HashMap<Integer, Integer> map = new HashMap<>();
        boolean[] visited = new boolean[vertexNum];
        dfs(a, b, visited, map);
        // 将路径重现
        System.out.println(map.toString());
        LinkedList<Integer> res = new LinkedList<>();
        while (b != a) {
            res.offerFirst(b);
            b = map.get(b);
        }
        res.offerFirst(a);
        return res;
    }

    /*
     * @Author ARong
     * @Description dfs搜索a到b的路径
     * @Date 2020/3/2 9:56 上午
     * @Param [a, b, visited, list]
     * @return void
     **/
    private void dfs(int a, int b, boolean[] visited, HashMap<Integer, Integer> map) {
        // dfs终止条件,找到b
        if (a == b) {
            return;
        }
        visited[a] = true;
        Iterator<Integer> iterator = adj(a).iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            // 继续dfs
            if(!visited[next]) {
                // 记录来时路径
                map.put(next, a);
                dfs(next, b, visited, map);
            }
        }
    }
6.广度优先遍历
/*
     * @Author ARong
     * @Description 广度优先遍历
     * @Date 2020/3/2 11:46 上午
     * @Param [i, visited]
     * @return void
     **/
     public void bfs(int i, boolean[] visited) {
         LinkedList<Integer> queue = new LinkedList<>();
         queue.offer(i);
         visited[i] = true;
         while (!queue.isEmpty()) {
             Integer poll = queue.poll();
             // 访问标记
             Iterator<Integer> iterator = adj(poll).iterator();
             while (iterator.hasNext()) {
                 // 获取poll的全部连接的顶点,继续bfs
                 Integer next = iterator.next();
                 if (!visited[next]) {
                     visited[next] = true;
                     queue.offer(next);
                 }
             }
         }
     }
7.寻找最短路径
/*
     * @Author ARong
     * @Description 获取a和b之间的最短路径
     * @Date 2020/3/2 11:57 上午
     * @Param [a, b]
     * @return java.util.List<java.lang.Integer>
     **/
    public List<Integer> findShortestPath(int a, int b) {
        // 判断是否连通
        if (!isConnected(a, b)) {
            return null;
        }
        // 连通,通过dfs搜索,并使用数组记录路径
        HashMap<Integer, Integer> from = new HashMap<>();
        boolean[] visited = new boolean[vertexNum];
        bfs(a, b, visited, from);
        // 将路径重现
        LinkedList<Integer> res = new LinkedList<>();
        while (b != a) {
            res.offerFirst(b);
            b = from.get(b);
        }
        res.offerFirst(a);
        return res;
    }

    /*
     * @Author ARong
     * @Description 广度优先遍历寻找最短路径
     * @Date 2020/3/2 11:57 上午
     * @Param [a, b, visited, from]
     * @return void
     **/
    private void bfs(int a, int b, boolean[] visited, HashMap<Integer, Integer> from) {
        LinkedList<Integer> queue = new LinkedList<>();
        queue.offer(a);
        visited[a] = true;
        while (!queue.isEmpty()) {
            Integer poll = queue.poll();
            // 访问标记
            Iterator<Integer> iterator = adj(poll).iterator();
            while (iterator.hasNext()) {
                // 获取poll的全部连接的顶点,继续bfs
                Integer next = iterator.next();
                if (!visited[next]) {
                    // 记录来时路径
                    from.put(next, poll);
                    // 判断是否找到
                    if (next == b) {
                        return;
                    }
                    visited[next] = true;
                    queue.offer(next);
                }
            }
        }
    }
零基础图论入门 阅读详情

相关推荐

图论基础知识总结

图是由节点和连接节点之间的边组成的,与连线的长度,节点的位置没有关系。一个图是一个三元组,其中V是一个非空的节点集合,E是边集合,F是从边集合E到节点序偶(无序偶或有序偶)集合上的函数。若图中边总是两个节点的关联,则图可简记为G=。树可以是空树但图不能是空图。图的结点集不能为空但边集可以为空。**无向图:**若图中所有边都是无向边,则图是无向图; **有向图:**若所有边都是有向边,则图是有向图; **混合图:**若图中既有无向边又有无向边则图为混合图; **多重图...

欢迎订阅 -- 小源笔迹 7911

图论的基本知识

图论是数学的一个分支,研究图(Graph)的结构、性质以及它们之间的关系。寻找一个图的生成树,即包含图中所有顶点且边的权重之和最小的树。在图中寻找一种最优的流动方式,通常用于建模网络中的资源分配、流量控制等问题。在计算机科学中,图论用于设计和分析网络拓扑结构、路由算法、网络流等,以提高网络性能和可靠性。图由节点(顶点)和连接节点的边组成。图神经网络等图学习方法利用图论的概念来处理具有图结构的数据,如社交网络、分子结构等。对图算法的复杂性进行分析,包括时间复杂性和空间复杂性,以评估算法在大规模图上的效率。

Alaskan_Husky的博客 6032

图机器学习(1)——图论基础

图 (Graph) 是一种描述实体间关系的数学结构,几乎在各个领域都有应用。例如,社交网络就是图,其中用户之间的连接取决于一个用户是否“关注”另一个用户。图论,即对图的研究,一直以来广受关注,包含了大量算法、性质分析方法和数学模型,以解析复杂系统的行为特征。本节将介绍图数据结构的核心概念,通过理论阐述与实例演示相结合的方式,理解基础理论用以实践应用。重点介绍用于创建、操作和研究复杂网络结构与功能的 Python 库。

盼小辉丶的博客 9202

数据结构—图

一、基本概念

杨建军的博客 1万+

1、基础图论入门

本文介绍了图论的基本概念和术语,包括简单图与多重图的定义、图的表示方法、图的遍历算法(DFS和BFS)、最短路径问题(Dijkstra算法)、图的连通性与树的性质,以及图的着色与标记应用。通过这些内容,读者可以对图论的基础知识有全面的了解,并为进一步学习打下坚实基础。

g2h3i4j5的博客 235

2、图与图论基础入门

本文介绍了图论的基础概念,包括图的定义、类型及其在社交网络和地图等领域的实际应用。同时讨论了图的绘制方法、常见操作以及相关算法工具,旨在为读者提供对图论的基本理解,并为进一步学习和研究打下基础。

Apple的专栏 146

图论基础算法入门笔记

单源最短路是固定一个起点,求它到其他点的最短路问题。

ysa051030的博客 1305

5、图论基础与信念网络入门

本文介绍了图论基础与信念网络的基本概念及其在概率建模中的应用。从图的定义、路径、循环、连通性等基本概念出发,详细阐述了有向无环图(DAG)和邻接矩阵等表示方法,并引入信念网络作为描述变量间独立性假设的有效工具。文章进一步讲解了信念网络的正式定义、联合概率分解、精确与近似推理方法,以及结构学习和参数学习的技术路线。通过实际应用场景如故障诊断、医疗诊断和自然语言处理,展示了信念网络的强大表达能力和实用性。最后总结了相关技术的流程与未来发展方向,为理解和构建复杂概率模型提供了系统性入门指导。

w8x9y0z1的博客 33

[AIGC] 图论基础入门

图是由点(称为节点或顶点)和线(称为边)组成的。这些点和线可能代表现实生活中的某些对象或实体,边表示这些对象之间的某种关系。基本上,有两种类型的图:无向图:边没有方向。如果存在一条连接节点 A 和节点 B 的边,那么我们可以说 A 是 B 的邻居,反之亦然。eg. A – B有向图:边有方向。如果存在一条从节点 A 指向节点 B 的边,那么我们只能说 B 是 A 的邻居,但不能说 A 是 B 的邻居。注意:在无向图中,边(A,B)和(B,A)是相同的。但在有向图中,A->B和B->A。

程序员三木的博客 1194

Qt中多线程的使用(一)

我们要实现的是读取大文件qtgui.index的内容加入文本框中。 很容易想到的方法: QFile* file = new QFile("E:\qtgui.index"); file-&gt;open(QIODevice::ReadOnly); QTextStream *stream = new QTextStream(file); while(!st...

yao5hed的专栏 1万+

4.图像sensor的特性和驱动解析

例子:sensor驱动自己提供操作曝光时间的函数和获取曝光时间的函数,然后将这个函数注册到ISP库和3A算法库,3A算法库根据外部光照强度计算出一个Sensor曝光时间的设置值,ISP库得到这个设置值,然后通过Sensor之前注册的回调函数,把这个值设置到Sensor的硬件寄存器中去,实现整个过程。是为 ISP 配置正确的输入时序。(1)修改驱动源码(sambashar\Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp\sensor\ar0130)

weixin_53762042的博客 3571

图论入门基础

点击上方蓝字 关注我,涨知识图论是计机算算法中很重要的一种思想,很多的实际问题都可以通过图论建模来解决。本文先介绍基本的图论相关知识,为后续讲解具体的图论算法做铺垫,如最大匹配,最小生成树...

小K算法 1176

移动开发(一):使用.NET MAUI开发第一个安卓APP

它是.NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。使用 .NET MAUI,可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。.NET MAUI 是一款开放源代码应用,是 Xamarin.Forms 的进化版,从移动场景扩展到了桌面场景,并从头重新生成了 UI 控件,以提高性能和可扩展性。

IT技术分享社区 2708

leetcode图论基础入门

文章目录leetcode 14天图论基础day : 1[733. 图像渲染](https://leetcode-cn.com/problems/flood-fill/)[200. 岛屿数量](https://leetcode-cn.com/problems/number-of-islands/)version 1.0version 2.0version 3.0 leetcode 14天图论基础 day : 1 733. 图像渲染 思路:dfs,需要注意的是:如果newColor = 中心点的数值,不能dfs

忘眠的博客 591

Unity URP管线下的Highlight Plus插件,从导入到实现物体高亮的保姆级避坑指南

本文详细解析了在Unity URP管线中使用Highlight Plus插件实现物体高亮的完整流程与常见问题解决方案。从URP环境配置、插件导入避坑到相机设置优化,提供了一套完整的保姆级指南,帮助开发者高效解决高亮效果不显示等典型问题,并包含移动端性能优化与复杂场景管理的高级技巧。

weixin_27379781的博客 408

IGBT基础知识及应用电路仿真(Multisim)

本文系统介绍了IGBT(绝缘栅双极晶体管)及其应用电路。首先详细解析了IGBT的基本结构、工作原理和特性参数,重点阐述了其五层半导体结构、电导调制效应和电压驱动特性。随后通过Multisim仿真展示了IGBT在四种典型功率变换电路中的应用:半桥驱动电路实现隔离式互补驱动;全桥逆变电路完成DC-AC转换;三相桥式逆变电路生成三相交流电;直流斩波电路(BUCK/BOOST/BUCK-BOOST)实现电压升降变换。文章通过理论分析与仿真波形相结合,全面呈现了IGBT在中高压大功率场景下的优异性能和灵活应用。

XU157303764的博客 1221

图论入门及基础概念(图篇)

图篇 这是第一次写博客,为了下载积分而来。 随便写些,各位大佬们多多指教。 本次内容是关于图论的引入的,内容如下: - 矩阵引入 - 什么是图?其如何表示? - 图论起源之七桥问题 - 图论引入 - 图论相关的基本概念 - 图的表示 矩阵引入 线性代数学的好的可以直接跳过, &amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;当然,看不懂的也可以直接跳过,这部分引入只是...

妖米的博客 2万+

枪支/刀具检测 (gun, knife) - SIXray, Clasp Dataset,YOLOv11+UI界面+数据集

python复制编辑# 计算 CIoU 损失。

YOLO 539

图论入门:从基础概念到经典算法

本文将从图的基本概念出发,介绍图的存储方式、几种经典的最短路算法(Floyd、Dijkstra、Bellman-Ford和SPFA),以及树的基本概念和遍历方法。图论是计算机科学中的重要工具,掌握图的基本概念、存储方式和经典算法是解决图论问题的基础。本文介绍了图的存储方法、最短路算法、树的基本概念和遍历方法,以及树形DP的初步应用。图(Graph)是由若干顶点(Vertex)和连接顶点的边(Edge)构成的结构,用于描述事物之间的关系。树的重心是指删除该节点后,图中所有连通块的最大尺寸最小的节点。

2401_86272262的博客 456

嵌入式系统开发笔记96:将STM32CubeIDE设置为中文

本文介绍将STM32CubeIDE设置为中文的方法。

snmplink的博客 8540

高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式)

GW1NSR-4C ARM部分共有2个串口外设,都挂载在APB1总线上,最高支持波特率921.6Kbit/s,无奇偶校验位,8位数据位,1位停止位,支持高速测试模式 HSTM(High Speed Test Mode),即每个时钟周期输出1位数据,可以在短时间内传输大量数据。官方手册上没有描述发送和接收缓存FIFO的深度,所以不确定是否支持缓存。

whik1194的博客 1687

图论入门【数据结构基础】:什么是树?如何表示树?

图论是计算机科学和数学中的一个重要分支,研究图的结构及其性质。本文将介绍树的基本概念、性质及其在计算机科学中的应用。在图论中,树是一种无向图,具有以下两个主要特性:1. 连通性:树中的任意两个顶点之间都存在一条路径。2. 无环性:树中不存在任何环。

大葱的田地🌱 1896

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

图论 (Java) 从入门到入土 /第一部分 图的基础-图的定义/

图,是一种比较复杂的数据结构。和树的一个节点只和上层一个节点相连不同,在图中,任意两个节点都可能相连,且可能具有方向性,并且节点的边具有权重,因此,图被用于描述各种复杂的数据对象,在自然科学、社会科学和人文科学等诸多领域有着非常广泛的应用。 图论中一些经典的需要解决的问题有:图的遍历、图的连通性、图的判圈(环路检测)、最短路径、拓扑排序、最小生成树、网络流、二部图等。图论中一些经典的需要掌握的算法有:DFS、BFS、并查集、Dijkstra、Floyd、Prim、Kruskal等,需要了解并掌握。

weixin_45532984的博客 1889

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 第三百篇博客:写给自己的总结
下一篇: 最小生成树问题与Prim、Kruskal算法
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值