数据结构——第六讲、图(图、图的遍历、最短路径、最小生成树和拓扑排序)

数据结构——循环队列详解 队列主要有顺序队列,循环队列,双端队列,优先队列。而当中循环队列是一种线性数据结构。它也被称为“环形缓冲器”。它只允许在一端进行插入操作,即队尾(rear),而在另一端进行删除操作,即队头 (front),其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。向队列中插入新的数据元素称为入队,新入队的元素就成为了队列的队尾元素。循环队列允许元素在队尾插入,在队头删除,同时遵循先进先出原则。由于循环队列是基于数组实现的,所以它的访问速度很快,特别是在移动元素时。 阅读详情

6.1 什么是图

  图是描述多对多关系的结构,图包含顶点和边,顶点用V(Vertex)表示,边用E(Edge)表示,双向边用(v,w)圆括号括住的顶点对表示,单向边用<v,w>表示。
操作集:

Graph Create();
Graph InsertVertex(Graph G, Vertex V);
Graph InsertEdge(Graph G, Edge E);
void DFS(Graph G, Vertex V); //从V出发深度优先遍历图G
void BFS(Graph G, Vertex V); //从V出发广度优先遍历图G
void ShortestPath(Graph G, Vertex V, int Dist[]);//计算图G中顶点V到其他任意顶点的最短距离。
void MST(Graph G);//计算图G的最小生成树

怎么在程序中表示图:

邻接矩阵:
  对于一个图有N个节点,节点从0到N-1进行编号,用一个二维数组存储G[i,j],如果第i个元素和第j个元素之间有边,那么就把G[i,j]的值设置为1,否则设置为零。
  对于无向图(即两个节点之间的边没有方向,G[i,j]和G[j,i]等效),我们可以省略一半的存储空间,用一个(N*(N-1)/2)大小的一维数组来存储,要找i,j之间的边可以用(i*(i+1)/2+j)来索引。有向图不可省略。
  邻接矩阵查找某个节点邻接的节点很方便,只需扫描第i行的元素是否为1即可,对于有权图,把数组值改为权值即可,对于有向图,ij表示从i到j,ji表示从j到i。
  邻接矩阵存储稀疏图(节点很多边很少)会非常浪费空间,比较适合存稠密图。
邻接表:
  稀疏图用邻接矩阵会浪费很多空间,那么我们可以用邻接表来存储稀疏图,邻接表是一个链表类型的数组,有N个节点就有N个元素,每个元素的值都是一个链表头,这个链表链接着这个元素对应节点的所有的边,无所谓顺序 ,一个接一个把边存下来,邻接表存稀疏矩阵比较好,但是终究不如邻接矩阵方便。

6.2 图的遍历

  图的遍历有两种方式:DFS(深度优先搜索)和BFS(广度优先搜索)。

  • DFS:就是从某一个节点开始,依次访问它的邻接点,每个邻接点都递归的调用DFS方法。
void DFS(Vertex V){
	V.Visited = true;
	//对于邻接表来说,访问V的每一个邻接点就是找到V对应的链表依次访问
	//对于邻接矩阵来说,需要访问V对应的那一行里所有的非零(或无穷)项
	for(V的每一个邻接点W){
		if(W没有被访问过){
			DFS(W);
		}
	}
}
  • BFS:广度优先搜索,类似于树的层序遍历,用队列实现。
void BFS(Vertex V){
	V.Visited = true;
	Queue Q;
	AddQ(Q,V);
	while(!IsEmpty(Q)){
		V = Delete(Q);
		for(V的每一个邻接点W){
			if(W没有被访问){
				V.Visited = true;
				AddQ(Q,W);
			}
		}
	}
}

  两种遍历方法各有优劣,不同的情况适用不同的方法。
  有的时候图并不是联通的,这时候要遍历,需要把图中的每个没有被访问的节点都调用一次BFS或DFS,就可以把每个节点都访问到。(两种遍历方法是检索数据的方式,并不是说找不到这些数据了,而是按照某种特定方法来遍历,达到某些目的)。

7.1 最短路径问题

  最短路径问题分为:单源最短路径和多源最短路径。
单源最短路径:
  单源无权图的算法思想:从源点开始一圈一圈往外扩展,依次找到与源点距离为1的,与源点距离为2的节点,对广度优先搜索(BFS)稍作修改即可。

void Unweighted( Vertex S ){
	int Dest[N] = {-1};
	Vertex Path[];
	EnQueue( S,Q );
	Dest[S] = 0;
	while( !IsEmpty Q ){
		V = DelQueue(Q);
		for(V的每一个邻接点W){
			if( Dist[W] == -1){
				//到W的距离等于到V的距离加1
				Dist[W] = Dist[V]+1;
				//到达W的最短路径必须经过V
				Path[W] = V;
			}
		}
	}
}
  • 单源有权图的算法(dijkstra算法):有一个集合S,它里面收录了源点和已经找到最短路径的点,按照距离非递减的顺序依次把所有的点都收录到S里面。
//需要把Dist初始化为正无穷,Path初始化为-1
void Dijkstra(VerTex V){
	Dest[V] = 0;
	Collected[V] = true;
	for(V的每一个邻接点W){
		//E<V,W>bi表示V到W的距离,也就是权重。
		Dest[W] = E<V,W>;
	}
	while(1){
		V = 还未收录的节点的Dest最小的节点。
		if(所有的节点都被收录)break;
		Collected[V] = true;
		for(V的每一个邻接点){
			if( Collected[W] == false ){
				if(Dist[V] + E<V,W> < Dist[W]){
					Dist[W] = Dist[V] + E<V,W>;
					Path[W] = V;
				}
			}
		}
	}
}

多源最短路径:
方法一:可以直接把单源最短路径的方法对每一个节点都调用一遍(对稀疏图效果好)。
方法二:Floyd算法

bool Floyd( MGraph Graph, WeightType D[][MaxVertexNum], Vertex path[][MaxVertexNum] )
{
    Vertex i, j, k;
    /* 初始化 */
    for ( i=0; i<Graph->Nv; i++ )
        for( j=0; j<Graph->Nv; j++ ) {
            D[i][j] = Graph->G[i][j];
            path[i][j] = -1;
        }
    for( k=0; k<Graph->Nv; k++ )
        for( i=0; i<Graph->Nv; i++ )
            for( j=0; j<Graph->Nv; j++ )
                if( D[i][k] + D[k][j] < D[i][j] ) {
                    D[i][j] = D[i][k] + D[k][j];
                    if ( i==j && D[i][j]<0 ) /* 若发现负值圈 */
                        return false; /* 不能正确解决,返回错误标记 */
                    path[i][j] = k;
                }
    return true; /* 算法执行完毕,返回正确标记 */
}

8.1 最小生成树问题

最小生成树: 一个图构成最小生成树,图里面的每一个联通的节点都必须包含在生成树里面,生成树的边最少即(N-1)条,不构成回路,而且选出的边的权重和必须最小。
有两种算法:Prim算法和KrusKal算法

  • Prim算法:从一个根节点开始,依次选出可以选的边,选择的边要是权重最小的,且不会构成回路。适用于边比节点多很多。
void prim(VerTex V){
	//根节点的parent就是-1,非根节点的parent是它的父元素。
	parent[V] = -1;
	//根节点的dest为0,根节点的邻接点dest为边的距离,其余的dest都是无穷大。
	dest[V] = 0;
	for(V的每一个邻接点W){
		dest[W] = E<V,W>;
	}
	while(1){
		V = 全部节点中dest最小的非零节点;
		if(没有这样的节点V)
			break;
		//将V收录进MST
		dest[V] = 0;
		for(V的每一个邻接点W){
			//如果W没有被收录,即W的dest不为零
			if(dest[W] != 0 && E<W,V> < dest[W]){
				dest[W] = E<W,V>;
				parent[W] = V;
			}
		}
	}
	if(MST中的节点不足|V|个)
		Error("生成树不存在!")
}
  • KrusKal算法:每次选择权重最小的,不会构成回路的边。适用于边和节点属于同一数量级的
void kruskal(VerTex V){
	//MST初始为空。
	MST = {};
	while(MST中的边不到N-1条 && 边集E中还有边存在){
		//最小堆
		//个人思路:构造一个存储边的结构体,包含这条边两端的节点信息
		从E中取出一条权重最小的边E<V,W>;
		将E<V,W>从边集中删除;
		//并查集检查选中边的两个节点是否在同一个集合中
		//个人思路:将边加入MST中时,同时将边的两个节点标记为已经加入,判断是否构成回路就判断这条边两个节点是否都已经加入。
		if(E<V,W>添加到MST中不会构成回路)
			将E<V,W>加入MST中
	}
	if(MST中的边不到N-1条)
		Error("生成树不存在");
}

8.1 拓扑排序

  拓扑序: 如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序。获得一个拓扑序的过程就是拓扑排序。AOV如果有合理的拓扑序,则必定是一个有向无环图(DAG)。

void topSort(){
	for(图中的每一个顶点V)
		if(Indegree[V] == 0)
			InQueue(Q,V)
	while(!IsEmpty(Q)){
		V = Dequeue(Q);
		输出V,或者记录V的输出序号。
		for(V的每一个邻接点W)
			if(--Indegree[W] == 0)
				InQueue(Q,W)
	}
	if(输出的个数不足|V|个)
		Error("图中有回路");
}
【数据结构】循环队列 队列又称为"先进先出(FIFO)"线性表:插入操作只能在队尾进行,删除操作只能在队首进行。而循环队列是队列的一种特殊形式,循环队列(也被称为环形队列)是一种线性数据结构,其操作表现基于先进先出原则,并且队尾被连接在队首之后以形成一个循环。循环队列固定大小,空间能够重复利用。循环队列可以用数组或者链表实现,那下面我们来分析一下哪种方式更好:当我们想使用链表实现时,假设我们想要开辟的队列长度为k = 4;front表示队头指针,rear表示队尾指针:由上图可知,当rear和front 都指向同一个位置时队列为空 阅读详情

相关推荐

算法与数据结构复习 第六章 图(详解)

文章目录第六章 图书面作业一、判断题二、单选题三、填空题 第六章 图 书面作业 一、判断题 1、如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G一定有2个连通分量。 (T) 解析: 进行一次广度优先搜索,则与之连通的结点都会遍历到。 2、在任一有向图中,所有顶点的入度之和等于所有顶点的出度之和。 (T) 解析: 一个结点的出度是相连结点的入度; 3、用邻接矩阵法存储图,占用的存储空间数...

好学者的博客 3万+

循环队列详解

简单易懂的循环队列

weixin_55858644的博客 4万+

王道408数据结构——第六章 图

文章目录一、图的基本概念二、图的储存邻接矩阵邻接表十字链表邻接多重表三、图的遍历广度优先搜索(BFS)深度优先搜索(DFS)图的遍历和图的连通性四、最小生成树Prim算法Kruskal算法五、最短路径Dijkstra求单源最短路径Floyd算法求解各顶点间的最短路径问题五、有向无环图(DAG图)描述表达式六、拓扑排序七、关键路径 一、图的基本概念 图G有定点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。用∣V∣|V|∣V∣表示图G中

weixin_45668903的博客 1761

【数据结构】队列——循环队列(详解)

0 循环队列循环队列(Circular Queue)是队列的一种实现方式,它通过将队列存储空间的最后一个位置与第一个位置相连接,形成一个循环的队列结构,从而可以更加高效地利用存储空间。在循环队列中,当队尾指针到达队列存储空间的末尾时,下一个插入操作将从头开始,即实现了队列的“循环”。1 特定条件下循环队列队/空队满判断条件在循环队列中,判断队列是否为空或已满是一个重要的操作。由于循环队列的特性,我们不能简单地通过比较队头指针(front)和队尾指针(rear。

2201_75425839的博客 1万+

考研数据结构笔记——第六章 图

一:图的存储及基本操作 1.邻接矩阵法 图的邻接矩阵存储方式是用两个数组来表示图 一个一维数组存储图中顶点信息 一个二维数组(邻接矩阵)存储图中的边或弧的信息 设图G有n个顶点,则邻接矩阵是一个n*n的方阵 1.1无向图 (1)要判断任意两顶点是否有边无边就很容易了; (2)要知道某个顶点的度,其实就是这个顶点vi在邻接矩阵中第i行或(第i列)的元素之和; (3)求顶点vi的所有邻接点就是将矩阵中第i行元素扫描一遍,arc[i][j]为1就...

刘鑫磊 1809

Delta-Sigma调制(DSM)技术

前言 数字信号处理和通信系统的性能很大程度上受到了模拟信号到数字信号转换接口——ADC的精度和分辨率的限制。而传统的线性脉冲编码调制(PCM)ADC受到了制造工艺的限制,无法达到很高的分辨率。但基于Delta-Sigma调制技术的ADC可以在现有工艺下实现高分辨率(大于16位),同时由于结构简单,所以易于实现。低成本高性能使得Delta-Sigma调制技术得到了广泛的应用。 Delta-Sigma型ADC的结构原理图如下图所示: 它最大的优势在于仅用1位ADC进行数据转换,同时其模拟电路部分结构简单不需要

阿星的博客 2万+

循环队列

队列又称为“先进先出”(FIFO)线性表 插入操作只能在队尾进行,删除操作只能在队首进行 队列也可以采用顺序存储结构和链表结构实现 循环队列只是队列的一种特殊形式 1.循环队列的由来 我们规定,当front == rear表示此队列为空,那么此时下面这个队列就为空队列,而且我们定义rear指向的下标永远可以存放数据 1.1当没有插入数据时 1.2当插入数据之后 1.3当删除数据之后 1.4当再次插入数据后 所以这就引出了我们的循环队列 2.循环队列 2.1当没有插入数据时 此时front==rea

wkh18891843165的博客 1万+

HR离职预测模型实战:可解释、可干预、可落地的三层架构

员工离职预测本质上是组织健康度的早期诊断技术,其核心原理在于从行为、心理与结构数据中识别稳定性衰减信号。该技术的价值不仅在于提升预测准确率,更在于将模糊的‘人才风险’转化为可归因、可干预的具体因子,如工龄阶段、满意度落差、薪酬分位数等。典型应用场景覆盖HRBP主动留任、业务部门梯队预警及HRIS系统智能升级。本文聚焦于构建具备业务可解释性与操作闭环能力的离职预警模型,深度融合HR工作流与机器学习工程实践,尤其强调逻辑回归基线、特征业务化重构及三层递进式架构设计。

赵士杰的博客 385

数据结构 第六章 图 作业(已批改)

判断题 1-1 无向连通图至少有一个顶点的度为1。 T F 1-2 用一维数组G[]存储有4个顶点的无向图如下:G[] = { 0, 1, 0, 1, 1, 0, 0, 0, 1, 0 },则顶点2和顶点0之间是有边的。 T F 1-3 若图G有环,则G不存在拓扑排序序列。 T F 1-4 无向连通图所有顶点的度之和为偶数。 T F 1-5 无向连通图边数一定大于顶点个数减1。 T F 1-6 用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。 T F 1-7 用邻接矩阵法存储图,占用

Jessieeeeeee的博客 1万+

利用arpspoof + sslStrip尝试进行arp欺骗

利用arpspoof + sslStrip尝试进行arp欺骗

qq_63575829的博客 347

SAP MM 物料描述MAKTX 40个字符不够用的问题处理

SAP物料描述表,长度40个字符一般情况下,40个字符在描述中也够用了,但是要加上规格之类的额外描述就不一定了,特别是对于辅助件-刀具。解决方案一:对maktx增强,换成CHAR80或者CHAR100的,但是风险较大,涉及到好多地方,另外SAP+ 算号器 也不支持。解决方案二:增强字段。内部顾问,建议在 那就在这里加一个字段,具体过程如下:1、创建域2、创建架构3、附加架构4、GUI 设置 5、后台设置6、MASS/MM17字段新增。过程1、创建域 SE112、创建结构 se11 3、MARA附加架构

GAVIN 4725

《数据结构》王道 第六章 图

《数据结构》王道 第六章 图 1. 图的定义和基本术语1.1 图的定义1.2 无向图和有向图1.3 简单图和多重图1.4 顶点的度、入度、出度1.5 顶点-顶点的关系描述1.6 连通图和强连通图1.7 子图、生成子图1.8 连通分量(无向图)1.9 强连通分量(有向图)1.10 生成树、生成森林1.11 边的权、带权图/网1.12 无向完全图、有向完全图、稀疏图、稠密图2. 图的存储2.1 邻接矩阵法 1. 图的定义和基本术语 1.1 图的定义 1.2 无向图和有向图 1.3 简单图和多重图 1.4

壹的博客 2971

西门子Industrial Copilot实战:5个工业场景下的AI效率提升案例

本文通过五个工业场景实战案例,深入解析西门子Industrial Copilot如何将工业智能转化为实际生产力。从自动化配置、预测性维护到能源优化与人机交互,这位AI助手显著缩短工程周期、提升设备可用率并降低运营成本,展示了其在工业领域系统化、工程化的落地价值。

3c4x5z6v7b的博客 924

算法与数据结构 第六章 图(详解)

目录 一、判断题 二、选择题 在开始之前,先为大家推荐四篇介绍该章四个主要算法的的文章,供大家参考。 Dijkstra算法求最短路径:Dijkstra算法原理_平凡的L同学的博客-优快云博客_dijiesitela Floyd算法求最短路径:Floyd算法求最短路径 Prim算法求最小生成树:Prim算法求最小生成树 Kruskal算法求最小上生成树:Kruskal算法求最小上生成树 一、判断题 1、用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。F 解析:用邻.

m0_62205773的博客 5699

使用Intel编译器编译OpenFOAM

本文总结了使用INTEL编译器编译OpenFOAM的过程

姜蜉蝣的博客 1546

GNSS/RTK定位失效时的替代方案:视觉惯性里程计(VIO)

GNSS/RTK定位失效时的替代方案:视觉惯性里程计(VIO)​ ,人工智能,计算机视觉,大模型,AI,本文详细介绍了视觉惯性里程计(VIO)作为GNSS/RTK定位失效时的替代方案。阐述了VIO的定义、优势及与其他定位技术的区别,讲解了视觉传感器和IMU的工作原理及数据融合原理,分析了时间同步、标定等关键技术,介绍了VINS-Mono等常用框架、简单代码示例、应用场景,还探讨了VIO面临的挑战与未来发展趋势,展现了其在多个领域的重要性与应用潜力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 16万+

866数据结构笔记 - 第六章 图

866数据结构、湖南大学考研、图

qq_45331246的博客 3825

llama.cpp 参数调优大全(4060 最优配置)

本文针对NVIDIA RTX 4060(8GB显存)显卡,提供了llama.cpp参数调优的实战指南。核心策略是采用小模型(7B/8B)配合Q4_K_M量化,通过合理设置GPU层数(-ngl 28)、上下文长度(-c 2048)和批量大小(-b 512)来平衡性能和显存占用。重点推荐启用flash-attn加速和mlock内存锁定,并给出标准、高性能和保守三种配置方案。调优优先级为:GPU利用率>吞吐量>显存>线程数,同时警示避免常见错误如过大上下文或GPU层数设置。最终推荐4060最佳配置为7B Q4_

刘一说的IT专栏 3402

数据结构第六章图

判断题 1-1 无向连通图所有顶点的度之和为偶数。T 1-2 无向连通图至少有一个顶点的度为1。F 1-3 用邻接矩阵法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。T 1-4 在一个有向图中,所有顶点的入度与出度之和等于所有边之和的2倍.T 1-5 如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G中一定有回路。F 1-6 在一个有权无向图中,若b到a的最短路径距离是12,且c到b之间存在一条权为2的边,则c到a的最短路径距离一定不小于10。T 1-7 用一维数组G[]存储有4个顶

qq_43592674的博客 8692

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【数据结构】第六章:图

【数据结构】第六章:图 一、图的定义 1. 基本概念 2. 特殊的图 二、图的存储结构 1. 邻接矩阵 2. 邻接表 3. 十字链表 4. 邻接多重表 5. 四种存储结构对比 三、图的基本操作 四、图的遍历算法 1. 广度优先遍历 2. 深度优先遍历 五、图的应用 1. 最小生成树 2. 最短路径问题 3. 有向无环图描述表达式 4. 有向无环图拓扑排序 5. 关键路径

iFulling的博客 1580

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

408数据结构知识点——第六章 图

图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若Vv1v2vnVv1​v2​...vn​,则用|V|表示图G中顶点的个数,也称图G的阶,Euv∣u∈Vv∈VE{(uv∣u∈Vv∈V,用|E|表示图G中边的条数。注:图的顶点集V一定非空,边集E可以为空。图逻辑结构的应用基于邻接矩阵和邻接表进行基本操作的复杂性讨论。

tridoron6的博客 1406

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数据结构——第六章:图

目录 1、图 2、图的存储 3、图的遍历 4、最小生成树 5、最短路径 6、拓扑排序

你相信光吗 1153

26考研 | 王道 | 数据结构 | 第六章 图

(1)无向图中边AB和BA是一个边,但是有向图中AB和BA是方向相反的两条边关于C2(n-1)的理解呢,我认为是如果一个图有7个顶点,那么除去一个顶点,剩下6个顶点都可以通过路径长度为1的路径直接到达对方,那么在这6个顶点构成的子图中,需要有条边满足这个条件,就等于C2(n-1),此时我们再把第7个节点和这6个点构成一张图,由于7和其他6个节点都不连通,所以是非连通图,但只要再加1条边就是连通图总结来说就是对无向图n-1个顶点构成的图中最多有C2(n-1)边,这张图肯定是连通图,但是再加上第n个节点就不连通

m0_74795952的博客 2078

数据结构第六章——图

数据结构——图

qq_54122504的博客 1121

数据结构与算法 | 第七章:图

图由表示数据元素的集合V和表示数据之间关系的集合E来组成。即,G = (V,E)。V是顶点vertex)的集合E是边edge)的集合图完全图任何两个顶点间都有边相关联的图,我们将其称为完全图。完全图显然具有最大的边数。稀疏图边数相对较少的图,我们将它称为稀疏图。它可以使用稀疏度稀疏因子)来表征稀疏程度。其边条数小于完全图的5%稠密图边数相对较多的图,我们将其称为稠密图。无向图若代表一条边的顶点序偶是无序的,我们将其称为无向图。无向图的偶对通常用圆括号来表示。

MissMango0820的博客 1490

数据结构(C语言)第二版 第六章课后答案

数据结构(C语言)第二版 第六章课后答案 1.选择题 ( 1)在一个图中,所有顶点的度数之和等于图的边数的()倍。 A. 1/2 B. 1 C. 2 D. 4 答案: C ( 2)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。 A. 1/2 B. 1 C. 2 D. 4 答案: B 解释:有向图所有顶点入度之和等于所有顶点出度之和。 ( 3)具有n 个顶点的有向图最多有()条边...

博客 3万+
上一篇: 数据结构——第五讲、树(堆、哈夫曼树和集合)
下一篇: NAT(Network Address Translation,网络地址转换)
Suzuki Mirai
博客等级 码龄9年 17粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值