我是靠谱客的博主 如意黄蜂,最近开发中收集的这篇文章主要介绍简单理解【链式前向星】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

知识主要来自https://malash.me/200910/linked-forward-star/

前向星

前向星是一个特殊的边集数组,我们将边集数组中的每条边按照起点排序(必要时起点相同的边再按终点排序),并记录下以某个点为起点的所有边的在数组中的起始位置和存储长度,前向星就构造好了。

len[i]记录所有以i为起点的边在数组中的存储长度

head[i]记录以i为起点的边集在数组中的第一个存储位置

但对所有边按起点排序,以快排计算,至少为O(eloge)的时间复杂度,对于最好时间复杂度为O(ke)k~=2的spfa来说,可能优化效果不明显或适得其反。

 

链式前向星及其应用

head[i]表示以i为起点的第一条边的存储位置。

next[i]表示与第i条边同起点的下一条边的存储位置。

e[i]表示第i条边的终点。

插入伪代码

链式前向星的构造时间复杂度为O(e),查询与普通前向星相同。

procedure insertDirectedEdge(i,u,v)
//插入第i条边,起点是u,终点是v
begin
e[i]:=v;//记录终点
next[i]:=head[u];//下一个指向
head[u]:=i;//首指针指向
end;

输出伪代码

procedure printEdge(u:longint);//输出所有以u为起点的边的终点
var
i:longint
begin
i:=head[u];
while(i!=0) do
begin
write(e[i],' ')
i:=next[i];
end;
end;

 

 

 

 

 

 

最后

以上就是如意黄蜂为你收集整理的简单理解【链式前向星】的全部内容,希望文章能够帮你解决简单理解【链式前向星】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部