前向星(Forward Star)

news/2024/10/18 10:28:52/

一、简介

        前向星是以储存边的方式来存储图的数据结构。

        构造方法如下:读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排序(可以使用基数排序,如下面例程),前向星就构造完了。通常用在点的数目太多,或两点之间有多条弧的时候。一般在别的数据结构不能使用的时候才考虑用前向星。

        除了不能直接用起点终点定位以外,前向星几乎是完美的。

       前向星的时间复杂度为O(m),m为边数。总体时间并不会逊色于邻接表。

二、代码

        其中A[i].to表示第i条边的终点,A[i].next表示与第i条边同起点的下一条边的存储位置,A[i].v为边权值。
        另外还有一个数组a[],它是用来表示以i为起点的第一条边存储的位置,实际上你会发现这里的第一条边存储的位置其实在以i为起点的所有边的最后输入的那个编号。

#include <bits/stdc++.h>
using namespace std;
struct Node
{int v, next;
}A[100001];
int a[100001],k=0;
inline void insert(int i, int j)
{k++;A[k].v=j;A[k].next=a[i];a[i]=eid;
}

        以上图为例,输入:

1 3 30

2 1 30

2 3 20

4 2 30

4 3 20

        按照输入信息模拟一下:

A[0].v=3; A[0].next=-1; head[1]=0;

A[1].v=1; A[1].next=-1; head[2]=1;

A[2].v=3; A[2].next=1; head[2]=2;

A[3].v=2; A[3].next=-1; head[4]=3;

A[4].v=3; A[4].next=3; head[4]=4;

        head[i]保存的是以i为起点的所有边中编号最大的那个,而把这个当作顶点i的第一条起始边的位置。这样在遍历时是倒着遍历的,也就是说与输入顺序是相反的,不过这样不影响结果的正确性。
        比如以上图为例,以节点2为起点的边有2条,它们的编号分别是1,2 而head[2]=2,我们在遍历以u节点为起始位置的所有边的时候是这样的:

for(int i=head[u] ; i!=-1; i=A[i].next)

        那么就是说先遍历编号为2的边,也就是head[2],然后就是A[2].next,也就是编号1的边。然后因为A[1],next==-1,所以就退出了,这样就遍历完成了


http://www.ppmy.cn/news/494560.html

相关文章

基本相机模型及参数

1.相机模型 1.1基本针孔相机模型 如图: 空间中一点 M ( X &#xff0c; Y &#xff0c; Z ) M(X&#xff0c;Y&#xff0c;Z) M(X&#xff0c;Y&#xff0c;Z)在图像平面上的投影点为 m ( ( x m , y m , z m ) m((x_m, y_m,z_m) m((xm​,ym​,zm​),相机的焦距为 f f f,对于…

使用mencoder转换佳能数码相机录像文件的最佳参数

使用mencoder转换佳能数码相机录像文件的最佳参数 授权方式&#xff1a;署名&#xff0c;非商业用途&#xff0c;保持一致&#xff0c;转载时请务必以超链接(http://www.fwolf.com/blog/post/277)的形式标明文章原始出处和作者信息及本声明。 佳能数码相机深得用户喜爱&#x…

Java日期格式化(DateFormat类和SimpleDateFormat类)

格式化日期表示将日期/时间格式转换为预先定义的日期/时间格式。 例如&#xff1a;将日期“Fri May 18 15:46:24 CST2016” 格式转换为 “2016-5-18 15:46:24 星期五”的格式。 在 Java 中&#xff0c;可以使用 DateFormat 类和 SimpleDateFormat 类来格式化日期&#xff0c;…

Golang每日一练(leetDay0103) 区域和检索1~3 Range Sum Query

目录 303. 区域和检索 - 数组不可变 Range Sum Query Immutable &#x1f31f; 304. 二维区域和检索 - 矩阵不可变 Range Sum Query 2d Immutable &#x1f31f;&#x1f31f; 307. 区域和检索 - 数组可修改 Range Sum Query Mutable &#x1f31f;&#x1f31f; &#…

如何使用众安科技智能化运维管理平台提高企业效率

数字化时代企业对于运维管理的需求越来越迫切。传统的手动运维方式已经无法满足企业对高效、可靠的运维管理的需求。众安科技作为一家科技公司&#xff0c;提供智能化运维管理平台&#xff0c;为企业提供全面的运维解决方案。本文将详细介绍如何使用众安科技智能化运维管理平台…

旧手机进水了,显示手机低温无法充电

拆开观察&#xff0c;副板和主板上面没有明显进水。只是电池插座那里有点印记。擦干净晾干还是不行。电池掉电到关机。后面再仔细观察&#xff0c;没想到&#xff0c;电池插头居然都生盐卤了。擦干净还不行。又擦了一次&#xff0c;因为确信是温度检测线造成的低温提示。第二次…

【碎碎念1】进水手机恢复+补办身份证+写安卓作业

进水手机恢复 昨天下午手机进水了&#xff0c;因为我很迅速&#xff0c;一掉进去我就立马捞了出来&#xff0c;水只没过了手机的一半。当时没事&#xff0c;都能正常使用&#xff0c;我擦了擦就没管了。晚上吃饭前给手机充上了电&#xff0c;吃完饭回来一看&#xff0c;一点都…

7X用计算机USB口充电好吗,用插排的USB口充电伤手机吗?

如今智能手机的普及也让USB接口得到统一&#xff0c;不光手机&#xff0c;包括很多的设备也都统一的使用USB接口作为连接充电器的接口。USB接口的统一也衍生另外一个生活工具&#xff0c;那就是USB插排。不需要充电器就可以给手机等设备充电的功能极大的方便了用户的使用。然而…