第七章 图论

这篇具有很好参考价值的文章主要介绍了第七章 图论。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第七章 图论

一、数据结构定义
  1. 图的邻接矩阵存储法
    #define MaxVertexNum 100 // 节点数目的最大值
    
    // 无边权,只用0或1表示边是否存在
    bool graph[MaxVertexNum][MaxVertexNum];
    
    // 有边权
    int graph[MaxVertexNum][MaxVertexNum];
    
  2. 图的邻接表存储法
    把所有节点存储为节点数组,每个节点里有自己的数据和一个边指针,这个边指针相当于一个链表的头指针,这个链表里存放所有与这个节点相连的边,边里存放该边指向的节点编号和下一条边指针
    第七章 图论,数据结构代码相关,图论
    第七章 图论,数据结构代码相关,图论
    #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. 图的十字链表存储法(有向图)

    分为弧节点和顶点节点。一个弧指向两个弧(是它的两个下一接替者),一个顶点指向两个弧(都是它的第一任)
    此外,十字链表还可用于存储稀疏矩阵,矩阵的各行各列都各用一个链表存储,同时将所有行链表的表头rhead存储到一个数组,所有列链表的表头存储到另一个数组chead中。
    可以将十字链表记忆为串起来的三元组,即一个边节点记为(行,value,列)(即(弧尾,权值,弧头)),多个三元组的行和列分别串成一个链表,代表相同行的元素以及相同列的元素(即弧尾相同和弧头相同的元素)
    第七章 图论,数据结构代码相关,图论

    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. 图的邻接多重表存储法(无向图)
    第七章 图论,数据结构代码相关,图论
    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实现
      #define MaxVertexNum 100  // 图中节点数目的最大值
      bool visited[MaxVertexNum];  // 访问标记数组
      vector<int> G[MaxVertexNum];  // 邻接表
      int N;  // 节点个数
      
      // 对图G进行深度优先遍历,访问函数为visit()
      void DFSTraverse(){
      	for (int v=0; v<N; v++)  // 初始化
      		visited[v] = false;
      	for (int v=0; v<N; v++){
      		if (!visited[v])
      			DFS(v);
      	}
      }
      
      void DFS(int v){
      	visit(v);  // 访问节点v
      	visited[v] = true;  // 设访问标记为真
      	for (int w:G[v])
      		if (!visited[w])  // w为u的尚未访问的邻接节点
      			DFS(w);
      }
      
    • BFS实现(要用到队列)
      #include <iostream>
      #include <queue>
      #include <vector>
      using namespace std;
      #define MaxVertexNum 100
      
      vector<int> graph[MaxVertexNum];
      bool visited[MaxVertexNum];
      
      void BFS(int start){
      	queue<int> q;
      	q.push(start);  // 将起点push进队列
      	visited[start] = true;  // 标记起点已被访问
      
      	while (!q.empty()){   // 当队列不空时进行循环 
      		int currNode = q.front();
      		q.pop();
      
      		visit(currNode);
      		for (auto adjNode : graph[currNode]){
      			if (!visited[adjNode]){
      				visited[adjNode] = true;
      				q.push(adjNode);  // 将未被访问的相邻节点加入队列中
      			}
      		}
      	}
      }
      
  2. 最小生成树
    • Prim算法(ACE:不要求记忆)
    • Kruskal算法(ACE:不要求掌握,理解并查集在Kruskal中的作用即可)
  3. 最短路径
    • Dijkstra算法
    • Floyd算法
  4. 拓扑排序算法(ACE:常考选择题)
  5. 关键路径算法 (ACE:常考选择题)
  6. 并查集
三、一些题目

第七章 图论,数据结构代码相关,图论
1)无向图
2)

typedef struct{
	unsigned int ID, IP;
} LinkNode;

typedef struct{
	unsigned int Prefix, Mask;
} NetNode;

typedef struct ArcNode{
	int Flag;  // Flag=1为Link, Flag=2为Net
	union{
		LinkNode Lnode;
		NetNode Nnode;
	} LinkORNet;
	unsigned int Metric;
	struct ArcNode *next;
} ArcNode; 

typedef struct HNode{
	unsigned int RouterID;
	ArcNode *LN_link;
	sturct HNode *next;
}HNode; // 表头节点

第七章 图论,数据结构代码相关,图论
3)第七章 图论,数据结构代码相关,图论文章来源地址https://www.toymoban.com/news/detail-631606.html

到了这里,关于第七章 图论的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构 | 第七章:数组和矩阵 | 行主映射和列主映射 | 稀疏矩阵

    7.1.1 抽象数据类型 7.1.2 C++数组的索引 K维数组的索引(或下标) [ i 1 ] [ i 2 ] [ i 3 ] . . . [ i k ] [i_1][i_2][i_3]...[i_k] [ i 1 ​ ] [ i 2 ​ ] [ i 3 ​ ] ... [ i k ​ ] k维数组创建: int score [ u 1 ] [ u 2 ] [ u 3 ] . . . [ u k ] [u_1][u_2][u_3]...[u_k] [ u 1 ​ ] [ u 2 ​ ] [ u 3 ​ ] ... [ u k ​ ] ( u i u_i u i ​

    2024年01月16日
    浏览(47)
  • 第七章 图论

    第七章 图论 一、数据结构定义 图的邻接矩阵存储法 图的邻接表存储法 把所有节点存储为节点数组,每个节点里有自己的数据和一个边指针,这个边指针相当于一个链表的头指针,这个链表里存放所有与这个节点相连的边,边里存放该边指向的节点编号和下一条边指针 图的

    2024年02月14日
    浏览(88)
  • 《HeadFirst设计模式(第二版)》第七章代码——外观模式

    代码文件目录:  Subsystem: Amplifier PopcornPopper Projector Screen StreamPlayer TheaterLights HomeTheaterFacade HomeTheaterTestDrive notes.txt

    2024年02月13日
    浏览(47)
  • 第七章 文件和数据格式化

    7.1 文件的使用 文件时存储在辅助存储器上的一组数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象。文件包括文本文件和二进制文件两种类型。 7.1.1 文件的类型 文本文件一般由单一特定编码的字符组成,如UTF-8编码,内容容易统一展示和阅读。 二进制文

    2024年02月07日
    浏览(78)
  • 【数据库复习】第七章 数据库设计

    数据库设计的过程(六个阶段) ⒈需求分析阶段 准确了解与分析用户需求(包括数据与处理) 最困难、最耗费时间的一步 ⒉概念结构设计阶段 整个数据库设计的关键 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型 ⒊逻辑结构设计阶段 将概念结构

    2024年02月08日
    浏览(50)
  • 大数据技术原理与应用(第七章Zookeeper测试)

    一、选择题 1.Zookeeper服务端默认的对外服务端口是? A.8088 B.3888 C.2181 D.2888 2.Zookeeper生产环境一般采用多少台机器组成集群? A.1 B.3 C.5 D.奇数台(且大于1) 3.下面就Zookeeper的配置文件zoo.cfg的一部分,请问initLimit表示的含义是? A.Leader-Follower初始通信时限 B.Leader-Follower同步通信时

    2024年02月12日
    浏览(41)
  • 《移动互联网技术》 第七章 数据存取: 掌握File、SharePreferences、SQLite和ContentProvider四种数据存取方式

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月12日
    浏览(37)
  • 【期末不挂科-单片机考前速过系列P7】(第七章:11题速过串行口基本概念/结构/工作方式/双机通信例题)经典例题盘点(带图解析)

    前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Linux》专栏 YY的《数据结构》专栏 YY的《C语言基础》专栏 YY的《

    2024年02月02日
    浏览(55)
  • python第七章(字典)

    一。字典(类型为dict)的特点: 1.符号为大括号 2.数据为键值对形式出现 3.各个键值对之间以逗号隔开 格式:str1={\\\'name\\\':\\\'Tom\\\'}  name相当于键值(key),Tom相当于值 二。空字典的创建方法 三。字典的基本操作(增删改查) 1.字典的增加操作:字典序列[key] = 值 注意点:如果存

    2024年01月24日
    浏览(56)
  • 第七章金融中介

             金融中介是通过向资金盈余者发行 间接融资合约( 如存款单),并和资金短缺者达成 间接投资合约 (发放信贷)或购买其发行的证券,在资金供求方之间融通资金,对资金跨期、跨域进行优化配置的金融机构。         金融体系由金融市场和金融中介构成,以银行业为

    2024年02月04日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包