第七章 图论

第七章 图论

一、数据结构定义

  1. 图的邻接矩阵存储法

    cpp 复制代码
    #define MaxVertexNum 100 // 节点数目的最大值
    
    // 无边权,只用0或1表示边是否存在
    bool graph[MaxVertexNum][MaxVertexNum];
    
    // 有边权
    int graph[MaxVertexNum][MaxVertexNum];
  2. 图的邻接表存储法
    把所有节点存储为节点数组,每个节点里有自己的数据和一个边指针,这个边指针相当于一个链表的头指针,这个链表里存放所有与这个节点相连的边,边里存放该边指向的节点编号和下一条边指针

    cpp 复制代码
    #define MaxVertexNum 100 // 节点数目的最大值
    typedef struct EdgeNode{ // 边表节点
    	int adjvex; // 该边所指向的节点编号
    	struct EdgeNode *next; // 指向下一条边的指针
    	// Infotype info; // 边权值(如果有)
    }EdgeNode;
    
    typedef struct VNode{ //节点表节点
    	VertexType data; // 节点信息
    	EdgeNode *first; // 指向第一条依附该节点的边的指针
    }VNode;
    
    typedef struct{
    	int verNum, edgeNum; // 节点数和边数
    	VNode AdjList[MaxVertexNum]; // 节点数组
    } ALGraph; // 邻接表
  3. 图的十字链表存储法(有向图)

    cpp 复制代码
    typedef struct edgeNode{
    	int headVer, tailVer; 
    	struct edgeNode *hLink, *tLink; // 分别指向弧头和弧尾相同的下一条边
    	infoType info;
    } edgeNode;
    
    typedef struct VNode{
    	VerType data;
    	edgeNode *firstIn, *firstOut; // 分别指向入边表和出边表中的第一个边节点
    } VNode;
    
    typedef struct{
    	int verNum, edgeNum;
    	VNode XList[verNum]; // 顶点表
    } OLGraph;
  4. 图的邻接多重表存储法(无向图)

    cpp 复制代码
    typedef struct edgeNode{
    	int iVer, jVer; // 边的两个顶点在顶点表(数组)里的下标
    	struct edgeNode *iLink, *jLink; // 和顶点相连的下一条边
    	infoType info; // 带权图可存储边的权值
    } edgeNode;
    
    typedef struct VNode{
    	VerType data;
    	edgeNode *firstEdge;
    } VNode;
    
    typedef struct{
    	int verNum, edgeNum; // 图的顶点数和边数
    	VNode adjMuList[verNum];
    } AMLGraph; 

二、代码/算法

  1. 遍历/搜索
    • DFS实现
    • BFS实现
  2. 最小生成树
    • Prim算法(ACE:不要求记忆)
    • Kruskal算法(ACE:不要求掌握,理解并查集在Kruskal中的作用即可)
  3. 最短路径
    • Dijkstra算法
    • Floyd算法
  4. 拓扑排序算法(ACE:常考选择题)
  5. 关键路径算法 (ACE:常考选择题)
  6. 并查集
相关推荐
超梦dasgg16 小时前
Tarjan算法解 强连通分量 & 循环依赖
算法·深度优先·图论
散峰而望16 小时前
【算法练习】算法练习精选:从 Phone numbers 到 Decrease,覆盖字符串、模拟、图论思维题
数据结构·c++·算法·贪心算法·github·动态规划·图论
故事和你912 天前
洛谷-【动态规划2】线性状态动态规划4
开发语言·数据结构·c++·算法·动态规划·图论
江屿风2 天前
C++图的基本概念流食般投喂-竞赛编
开发语言·数据结构·c++·笔记·算法·图论
khalil10203 天前
代码随想录算法训练营Day-58 图论08 | 拓扑排序精讲、dijkstra(朴素版)精讲
c++·算法·图论·dijkstra·拓扑排序·prim·最短距离
菜菜的顾清寒5 天前
力扣HOT100(34)图论-岛屿数量
算法·leetcode·图论
Run_Teenage5 天前
算法:图的存储与遍历,最小生成树(Prim算法,kruskal算法)
算法·深度优先·图论
Shan12055 天前
干货分享|图论的常见存储方式之链式前向星
算法·图论
澈2076 天前
图论天花板:Dijkstra最短路径算法详解
数据结构·算法·图论
不知名的老吴6 天前
计算机中非常重要的一个领域——图论
图论