数据结构第七章图

合集下载

第七章图状结构

第七章图状结构

图的应用非常广泛。
2
7.1 图的类型定义
7.2 图的存储表示
7.3 图的遍历
7.4 最小生成树 7.5 两点之间的最短路径问题 7.6 拓扑排序
7.7 关键路径
3
图的结构定义:
图是由一个顶点集 V 和一个弧集 R构 成的数据结构。 Graph = (V , R ) 其中,R={<v,w>| v,w∈V 且 P(v,w)} <v,w>表示从 v 到 w 的一条弧,并称 v 为弧尾,w 为弧头。
4
由于“弧”是有方向的,因此称由顶 点集和弧集构成的图为有向图。
例如: G1 = (V1, VR1)
A
B C D E
其中 V1={A, B, C, D, E} VR1={<A,B>, <A,E>,
<B,C>, <C,D>, <D,B>, <D,A>, <E,C> }
5
若<v, w>VR 且<w, v>VR, 则称 (v,w) 为顶点v 和顶点 w 之间存在一条边。 例如: G2=(V2,VR2) V2={A, B, C, D, E, F} VR2={(A,B), (A,E),
0 0 0 1 0 1
0 0 1 0 0 1
1 1 0 0 0 0
0 1 1 1 0 0
24
无向图邻接矩阵表示法特点:
1)无向图邻接矩阵是对称矩阵 2)顶点v的度 3)判断两顶点v、u是否为邻接点 4)顶点不变,在图中增加、删除边 5)适用于边稠密的图;
25
有向图的邻接矩阵 为非对称矩阵
0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0

第7章图_数据结构

第7章图_数据结构

v4
11
2013-8-7
图的概念(3)
子图——如果图G(V,E)和图G’(V’,E’),满足:V’V,E’E 则称G’为G的子图
2 1 4 3 5 6 3 5 6 1 2
v1 v2 v4 v3 v2
v1 v3 v4
v3
2013-8-7
12
图的概念(4)
路径——是顶点的序列V={Vp,Vi1,……Vin,Vq},满足(Vp,Vi1),
2013-8-7 5
本章目录
7.1 图的定义和术语 7.2 图的存储结构

7.2.1 数组表示法 7.2.2 邻接表 ( *7.2.3 十字链表 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4.1 图的连通分量和生成树 7.4.2 最小生成树
*7.2.4 邻接多重表 )
7.3 图的遍历
连通树或无根树
无回路的图称为树或自由树 或无根树
2013-8-7
18
图的概念(8)
有向树:只有一个顶点的入度为0,其余 顶点的入度为1的有向图。
V1 V2
有向树是弱 连通的
V3
V4
2013-8-7
19
自测题
7. 下列关于无向连通图特性的叙述中,正确的是
2013-8-7
29
图的存贮结构:邻接矩阵
若顶点只是编号信息,边上信息只是有无(边),则 数组表示法可以简化为如下的邻接矩阵表示法: typedef int AdjMatrix[MAXNODE][MAXNODE];
*有n个顶点的图G=(V,{R})的邻接矩阵为n阶方阵A,其定 义如下:
1 A[i ][ j ] 0
【北方交通大学 2001 一.24 (2分)】

王道数据结构 第七章 查找思维导图-高清脑图模板

王道数据结构 第七章 查找思维导图-高清脑图模板

每次调整的对象都是“最小不平衡子树”
插入操作
在插入操作,只要将最小不平衡子树调整平衡,则其他祖先结点都会恢复平衡
在A的左孩子的左子树中插入导致不平衡
由于在结点A的左孩子(L)的左子树(L)上插入了新结点,A的平衡因子由1增
至2,导致以A为根的子树失去平衡,需要一次向右的旋转操作。
LL
将A的左孩子B向右上旋转代替A成为根节点 将A结点向右下旋转成为B的右子树的根结点
RR平衡旋转(左单旋转)
而B的原左子树则作为A结点的右子树
在A的左孩子的右子树中插入导致不平衡
由于在结点A的左孩子(L)的右子树(R)上插入了新结点,A的平衡因子由1增
LR
至2,导致以A为根的子树失去平衡,需要两次旋转操作,先左旋转再右旋转。
将A的左孩子B的右子树的根结点C向左上旋转提升至B结点的位置
本质:永远保证 子树0<关键字1<子树1<关键字2<子树2<...
当左兄弟很宽裕时,用当前结点的前驱、前驱的前驱来填补空缺 当右兄弟很宽裕时,用当前结点的后继、后继的后继来填补空缺
兄弟够借。若被删除关键字所在结点删除前的关键字个数低于下限,且与此结点 右(或左)兄弟结点的关键字还很宽裕,则需要调整该结点、右(或左)兄弟结 点及其双亲结点及其双亲结点(父子换位法)
LL平衡旋转(右单旋转)
而B的原右子树则作为A结点的左子树
在A的右孩子的右子树中插入导致不平衡
由于在结点A的右孩子(R)的右子树(R)上插入了新结点,A的平衡因子由-1
减至-2,导致以A为根的子树失去平衡,需要一次向左的旋转操作。
RR
将A的右孩子B向左上旋转代替A成为根节点 将A结点向左下旋转成为B的左子树的根结点

数据结构第七章:图

数据结构第七章:图


a c G1
b d
vexdata firstarc adjvex next 1 4 ^ a 2 3 4 b c d 1 1 3 ^ ^ ^
19
7.3 图的遍历
深度优先遍历(DFS) 深度优先遍历
方法:从图的某一顶点 出发,访问此顶点; 方法:从图的某一顶点V0出发,访问此顶点;然后依 次从V 的未被访问的邻接点出发,深度优先遍历图, 次从 0的未被访问的邻接点出发,深度优先遍历图, 直至图中所有和V 相通的顶点都被访问到; 直至图中所有和 0相通的顶点都被访问到;若此时图 中尚有顶点未被访问, 中尚有顶点未被访问,则另选图中一个未被访问的顶 点作起点,重复上述过程, 点作起点,重复上述过程,直至图中所有顶点都被访 问为止。 问为止。
ω ij , 若(v i , v j )或 < v i , v j >∈ E(G) A[i, j ] = 0,其它
11

1 3
5
2
8 4 7 5 1 6 3 4 2
0 5 7 0 3
5 0 0 4 8
7 0 0 2 1
0 4 2 0 6
3 8 1 6 0
12
关联矩阵——表示顶点与边的关联关系的矩阵 表示顶点与边的关联关系的矩阵 关联矩阵
1
7.1 图的定义和术语
是由两个集合V(G)和E(G)组成的 组成的, 图(Graph)——图G是由两个集合 图 是由两个集合 和 组成的 记为G=(V,E) 记为
其中: 其中:V(G)是顶点的非空有限集 是顶点的非空有限集 E(G)是边的有限集合,边是顶点的无序对或有序对 是边的有限集合, 是边的有限集合
有向图——有向图 是由两个集合 有向图G是由两个集合 有向图 有向图 是由两个集合V(G)和E(G)组成的 和 组成的

数据结构第7章 图习题

数据结构第7章 图习题

习题7 图7.1 单项选择题1.在一个图中,所有顶点的度数之和等于所有边数的____倍。

A. 1/2B. 1C. 2D. 42.任何一个无向连通图的最小生成树。

A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在3.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的____倍。

A. 1/2B. 1C. 2D. 44.一个有n个顶点的无向图最多有____条边。

A. nB. n(n-1)C. n(n-1)/2D. 2n5.具有4个顶点的无向完全图有____条边。

A. 6B. 12C. 16D. 206.具有6个顶点的无向图至少应有____条边才能确保是一个连通图。

A. 5B. 6C. 7D. 87.在一个具有n个顶点的无向图中,要连通全部顶点至少需要____条边。

A. nB. n+1C. n-1D. n/28.对于一个具有n个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是____。

A. nB. (n-1)2C. n-1D. n29.对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表头向量的大小为_①___;所有邻接表中的接点总数是_②___。

①A. n B. n+1 C. n-1 D. n+e②A. e/2 B. e C.2e D. n+e10.已知一个图如图7.1所示,若从顶点a出发按深度搜索法进行遍历,则可能得到的一种顶点序列为__①__;按宽度搜索法进行遍历,则可能得到的一种顶点序列为__②__。

①A. a,b,e,c,d,f B. e,c,f,e,b,d C. a,e,b,c,f,d D. a,e,d,f,c,bC. a,e,b,c,f,dD. a,c,f,d,e,b图 7.1 一个无向图11.已知一有向图的邻接表存储结构如图7.2所示。

⑴根据有向图的深度优先遍历算法,从顶点v1出发,所得到的顶点序列是____。

A. v1,v2,v3,v5,v4B. v1,v2,v3,v4,v5C. v1,v3,v4,v5,v2D. v1,v4,v3,v5,v2⑵根据有向图的宽度优先遍历算法,从顶点v1出发,所得到的顶点序列是____。

数据结构(C语言版)_第7章 图及其应用

数据结构(C语言版)_第7章 图及其应用
(1)创建有向图邻接表 (2)创建无向图的邻接表
实现代码详见教材P208
7.4 图的遍历
图的遍历是对具有图状结构的数据线性化的过程。从图中任 一顶点出发,访问输出图中各个顶点,并且使每个顶点仅被访 问一次,这样得到顶点的一个线性序列,这一过程叫做图的遍 历。
图的遍历是个很重要的算法,图的连通性和拓扑排序等算法 都是以图的遍历算法为基础的。
V1
V1
V2
V3
V2
V3
V4
V4
V5
图9.1(a)

图7-2 图的逻辑结构示意图
7.2.2 图的相关术语
1.有向图与无向图 2.完全图 (1)有向完全图 (2)无向完全图 3.顶点的度 4.路径、路径长度、回路、简单路径 5.子图 6.连通、连通图、连通分量 7.边的权和网 8.生成树
2. while(U≠V) { (u,v)=min(wuv;u∈U,v∈V-U); U=U+{v}; T=T+{(u,v)}; }
3.结束
7.5.1 普里姆(prim)算法
【例7-10】采用Prim方法从顶点v1出发构造图7-11中网所对 应的最小生成树。
构造过程如图7-12所示。
16
V1
V1
V2
7.4.2 广度优先遍历
【例7-9】对于图7-10所示的有向图G4,写出从顶点A出发 进行广度优先遍历的过程。
访问过程如下:首先访问起始顶点A,再访问与A相邻的未被 访问过的顶点E、F,再依次访问与E、F相邻未被访问过的顶 点D、C,最后访问与D相邻的未被访问过的顶点B。由此得到 的搜索序列AEFDCB。此时所有顶点均已访问过, 遍历过程结束。
【例7-1】有向图G1的逻辑结构为:G1=(V1,E1) V1={v1,v2,v3,v4},E1={<v1,v2>,<v2,v3>,<v2,v4>,<v3,v4>,<v4,v1>,<v4,v3>}

数据结构-第7章图答案

数据结构-第7章图答案

7.3 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点, 并且使图中的每个顶点仅被访问一次的过程。 一、深度优先搜索 从图中某个顶点V0 出发,访问此顶点,然后依次 从V0的各个未被访问的邻接点出发深度优先搜索遍 历图,直至图中所有和V0有路径相通的顶点都被访 问到,若此时图中尚有顶点未被访问,则另选图中 一个未曾被访问的顶点作起始点,重复上述过程, 直至图中所有顶点都被访问到为止。
void BFSTraverse(Graph G, Status (*Visit)(int v)) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组 visited。 for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; InitQueue(Q); // 置空的辅助队列Q for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) { // v尚未访问 EnQueue(Q, v); // v入队列 while (!QueueEmpty(Q)) { DeQueue(Q, u); // 队头元素出队并置为u visited[u] = TRUE; Visit(u); // 访问u for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) ) if ( ! visited[w]) EnQueue(Q, w); // u的尚未访问的邻接顶点w入队列Q
4。邻接多重表
边结点
mark ivex
顶点结点
ilink
jvex
jlink
info
data
firstedge
#define MAX_VERTEX_NUM 20 typedef emnu {unvisited, visited} VisitIf; typedef struct Ebox { VisitIf mark; // 访问标记 int ivex, jvex; // 该边依附的两个顶点的位置 struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条 边 InfoType *info; // 该边信息指针 } EBox; typedef struct VexBox { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 } VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; // 无向图的当前顶点数和边数 } AMLGraph;

第七章 图

第七章 图
vertex firstin firstout
顶点结点结构
顶点值域 指针域 指针域
tailvex headvex hlink
tlink
info
弧结点结构
弧尾结点 弧头结点 指针域 指针域 弧上信息
A B
C
在十字链表中容易求 得顶点的出度和入度
0 A
0 1

2 0∧∧
1 B 2 C
2 1∧
0 2∧∧
图的遍历方法有两种: 深度优先搜索和广度优先搜索
7.3.1 深度优先搜索
按照深度方向搜索 ,它类似于树的先根遍历。 深度优先算法的基本思想是: (1)从图中某个顶点v0出发,首先访问v0。 (2)找出刚访问过的顶点vi的第一个未被访问 的邻接点,然后访问该顶点。重复此步骤,直 到当前的顶点没有未被访问的邻接点为止。 (3)返回前一个访问过的顶点,找出该顶点的 下一个未被访问的邻接点,访问该顶点。转2。
一、图的数组(邻接矩阵)存储表示 二、图的邻接表存储表示
三、有向图的十字链表存储表示 四、无向图的邻接多重表存储表示
一、图的数组(邻接矩阵)表示法
所谓邻接矩阵(Adjacency Matrix)的存 储结构,就是用一维数组存储图中顶点的信息, 用矩阵表示图中各顶点之间的邻接关系。假设 图G=(V,E)有n个确定的顶点,即V= {v0,v1,…,vn-1},则表示G中各顶点相邻关系为一 个n×n的矩阵
遍 历
DFSTraverse(G, v, Visit());
//从顶点v起深度优先遍历图G,并对每 //个顶点调用函数Visit一次且仅一次。
BFSTraverse(G, v, Visit());
//从顶点v起广度优先遍历图G,并对每 //个顶点调用函数Visit一次且仅一次。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A
1 B 4 6 C F I 2 E 8 3
D
5 7
G
H
访问序列为:A、B、E、D、C、G、F、H、I。
广度优先搜索算法:
Procedure bfs(i:1..n);{图用邻接表g表示} Begin create(q); {建队,置队空} write(g[i].v); {访问vi} visited[i]:=true; {标记已经访问的结点} push(q,i); {进队列} while not empty(q) do {广度优先遍历,直到队列空为止,表示所有节点都被 访问过了} begin i:=pop(q); {取顶点,对首元素出队} p:=g[i].link; {取边表指针} while p<>nil do {还有后继顶点} begin if not visited[p^.adj] then begin write(g[p^.adj].v); {访问当前顶点} visited[p^.adj]:=true; push(q,p^,adj); {当前顶点入队} end; p:=p^.next; {从边表中取下一个邻接边} end; end; End;
若图G是一个网络,其邻接矩阵 w i j 若 (v i,v j) E,且 (v i,v j)的 权 值 为 w ij A[i ][ j ] 借助于邻接矩阵很容易判定任意两个顶点之间是否有边(或 弧)相连,并容易求得各个顶点的度,操作方便。 (2)邻接矩阵法的特点: 1. 存储空间:对于无向图而言,它的邻接矩阵是对称矩阵, 所以可采用压缩存储法(下三角),其存储空间只需n(n+1)/2。 但对于有向图而言,因为它的弧是有方向的,它的邻接矩阵不 一定是对称矩阵,所以需要n2个存储空间。 2. 便于运算:采用邻接矩阵表示法,便于判定图中任意两个 顶点之间是否有边相连,即根据A[i,j]=0或1来判断。另外还 便于求得各个顶点的度。
例如,图7.1(a)所示的为有向图,它是由集合 V={v0,v1,v2,v3} E={<v0,v1>,<v0,v2>,<v2,v3>,<v3,v0>} 组成的。
图7.1 (a)有向图G1
无向图:图的每条边是无方向的,有<u,v>∈E,必有<v,u>∈E。 即用圆括号括起来 (u,v)∈E表示边,并且,u和v互称为邻接点 例如,图7.1(b) 为无向图,它是由集合 V={ v0,v1,v2,v3,v4 } E={(v0,v1),(v0,v3),(v1,v2),(v1,v4),(v2,v3) ,(v2,v4)} 组成的。
生成树
1、概念 生成树是一个连通图G的一个极小的连通 子图。包含图G的所有顶点,但只有n-1条边,并 且是连通的。在生成树中,不存在回路路径,但 若在生成树中任意增加一条边,则必构成回路。 一个连通图的生成树不是惟一的,例如,对一个 连通图进行深度优先,在搜索过程中经过的边和 图的顶点,构成深度优先生成树;若进行广度优 先搜索,则构成广度优先生成树。非连通图有若 干个连通分量组成,每一个连通分量都存在生成 树,这样就构成生成森林。
其中实箭头代表访问方向,虚箭头代表回溯方向,箭头旁边的数 字代表搜索顺序,A为起始顶点。 8 A D G 9 1 1 1 16 7 14 0 3 6 B E H 15 2 5 1 12 C 3 4
1
F
I
访问序列为:A、B、C、F、E、G、D、H、I。
深度优先搜索算法:
Procedure dfs(i:1..n);{图用邻接表存储,其他方式的存储只 需稍作修改,g[i]为表头结点表} Begin write(g[i].v);{输出是最为简单的访问方式} visited[i]:=true; p:=g[i].link; while p<>nil do begin j:=p^.adj;{j为i的一个后继} if not visited[j] then dfs(j);{递归} p:=p^.next; {回溯} end; end/;
(a)有向图G (b)图G的二个强连通分量 生成树:在一个有n顶点的连通图G中,存在一个极小的连 通子图G′,G′包含图G的所有顶点,但只有n-1条边,并且 G′是连通的。
图的存储结构
常用的图的存储结构有邻接矩阵、邻接表、十字链表、 多重链表等方法。本节介绍最为常用的邻接矩阵和邻接表 方法。对图的存储结构的选择取决于具体的应用。
思考并实现:
1、分别在无向图和有向图的邻接表上统计各顶点的 度(有向图为入度和出度)。 2、统计图(有向图和无向图)的顶点度数和。
2、 边集数组表示法
边 数
起 点 终 点 权
v1 4
5 v5 2 1 7 v4 v3
1
1 2 4
2
1 5 5

3 4 1
6
4 5 7
v2
3
7.3 图的遍历
路径:在有向图(或无向图)中,如果存在首尾相接并且无重 复边的边序列<v0,v1>,<v1,v2>,…,<vn-2,vn-1> (或 (v0,v1), (v1,v2),…,(vn-2,vn-1)),那么称这个序列是一条从顶点到v0 到vn-1的一条路径,记着(v0,v1,v2,…,vn-2,vn-1)。序列中的 边数称为路径长度。在有向图中,路径是有方向的;而在无 向图中,路径无方向。 简单路径:在一条路径中,若除起点和终点外,所有顶点彼 此各不相同。
•图的定义和术语 •图的存储结构 •图的遍历 •生成树 •最短路径 •拓扑排序 习题
图是一种较线性表和树更为复杂的数据结构。 在线性表中,数据元素之间有线性关系,每一个数 据元素只有一个直接前驱和一个直接后续;在树形 结构中,数据元素之间有着明显的层次关系,即每 一个数据元素有一个直接前驱(双亲)和零个或多个 直接后续(孩子);而在图形结构中,结点之间的关 系是任意的,图中任意两个数据元素之间都可能相 关。由此,图的应用极为广泛。例如,城市间的最 短路径,火车的联票,交通网的计划,战场上的运 输问题,庞大的施工进度图等都是图的应用。
1、 邻接矩阵
(1)存储形式 邻接矩阵是用一个二维数组来表示图中顶点间的相邻 关系的数据结构。 设图G=(V,E),有n≥1个顶点,则所对应图G的邻接矩 阵A是按如下定义的一个n×n的二维数组。 若(vi ,v j ) E (对有向图为 vi ,vj E) 1 A[i][ j ] 否则 0
2、 最小生成树(最小支撑树)
图的定义和术语
定义: 图(graph):是一种数据结构,由二个集合V和E组成, 记作G=(V,E)。其中V是数据元素(顶点)的非空有限集,E是 V中二元关系(边edge)的集合。树是图的特例,而线性表是 树的特例。 术语: 有向图:图的每条边都是有序顶点对(即边是有方向)。 弧:有向图的边。并将构成该边的有序顶点对用一对 尖括号括起来。如<u,v>∈E,表示从顶点u到顶点v的一条 弧,称u为弧尾或初始点,v为弧头或终端点。并且说v是与 u相邻的顶点,或v是u的邻接点
2、 邻接表
(1)存储形式 对一个有n个顶点图的顶点进行编号,顶点的编号从1 到n。图的邻接表存储结构与树的孩子表示法相同。将图G 中每个顶点vi的所有邻接点用一个单链表(邻接点链表)表示, 在vi的邻接点链表中存放vj(有(vi,vj)或<vi,vj>∈E)的编号, 以及其它与该边或弧相关的信息。一个图有n个顶点就有n个 邻接点链表(度为0的顶点,所对应的邻接点链表为空表)。这 n个邻接点链表的头指针又构成一个线性表,用一个指针数 组存储该线性表,这样就构成了图的邻接表的存储结构。例 如,在图7.1中,G1和G2的的邻接表如图7.5所示,图中下标 对应顶点vi的编号。
网络:若图中每条边或弧都附加一个数值作为权,带权图。
子图:若G1={V1,E1},G2={V2,E2}是两个图,且V2被包含 在V1中,E2被包含在E1中,则称图G2是图G1的子图。
度:无向图中,顶点的度是依附于该顶点的边数。有向图中, 该顶点入边的数目叫入度,该顶点出边的数目叫出度,该顶 点的度就是入度+出度。图中的顶点度数之和等于边数的2倍。
(a)G1的邻接表
(b)G2的邻接表
图7.5 邻接表存储结构
逆邻接表:对于为网络的图G=(V,E),在node结构中可以添 加一个权值域。而对于有向图,图7.5(a)所示为按G1出度建立 的邻接表,在该邻接表中求每个顶点vi的出度和以vi为尾的弧 方便,但若要求顶点的入度,必须遍历整个邻接表。所以, 有时为了使求顶点vi的入度和以vi为头的弧方便,可以建立该 有向图的逆邻接表,即在vi的邻接点链表中存放vj(有 <vj,vi>∈E)的编号。如图7.6所示为图7.1(a)中G1的逆邻接表。
回路:在一条路径中,若起点和终点是同一顶点。
简单回路:有简单路径组成的回路称为简单回路。 连通:在无向图G中,若从顶点vi到顶点vj有路径存在。
连通图:在无向图G中,若任意二个顶点之间都是连通的.
连通分量:在非连通的无向图G中,极大连通子图(在满足 连通条件下,尽可能多的包含G中的顶点和这些顶点之间 的边) . 如图7.2中,图G有三个连通分量。
图7.6 G1的逆邻接表
生成无向带权图的邻接表的算法:
Const n:=图顶点数; e:=图中边数; Type edge=^edgenode; edgenode=record adj:1..n; weight:weighttype next:edge; end; vexnode=record data:datatype; link:edge; end; dajlish=arrar[1..n]of vexnode; Procedure create(var g:dajlish ); Begin for i:=1 to n do begin read(g[i].data); g[i].link:=nil; end; for k:=1 to e do begin read(i,j,w); new(s); s^.adj:=j; s^.weight:=w; s^.next:=g[i].link; g[i].link:=s; End; End;
相关文档
最新文档