链式前向星

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链式前向星相关的知识,希望对你有一定的参考价值。

感觉链式前向星这个名字比领接表高端了很多(逃

简而言之,链式前向星就是一种存图的东西

 

(话不多说,先上代码

#include <iostream>
#include <cstdio>
using namespace std;

struct Edge{
    int to,next;
}edge[505];

int cnt=0,h[505],n,bbg,een;

void add_edge(int bg, int en){
    cnt++;
    edge[cnt].to=en;
    edge[cnt].next=h[bg];
    h[bg]=cnt;
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>bbg>>een;
        add_edge(bbg,een);
    }
}

上面就是一个模板

下面就以这个二叉树为例来解释一下

技术分享图片

用h[t]来存储在t节点下的每个实时的边,以便之后存为前驱

用edge[i].next来记录第i条边前驱

如上图,输入为(7 5表示7个节点,5条边)

7 5
1 2
1 6
2 3
2 4
6 7

存储后即得到

i 1 2 3 4 5
edge[i].to 2 6 3 4 7
edge[i].next 0 1 0 3 0
h[t] h[1]=1 h[1]=2 h[2]=2 h[2]=4 h[6]=5

 

 

 

 

 

所以要遍历的话,就用两个for嵌套,第一个遍历所有节点,第二个以链式的方式,从最后一个h[t],向前依次遍历

代码如下

for(int i=1;i<=n;i++)
        for(int j=h[i];j>0;j=edge[j].next)

 

以上是关于链式前向星的主要内容,如果未能解决你的问题,请参考以下文章

前向星和链式前向星

前向星链式前向星实现以及它的遍历

链式前向星

图的存储:链式前向星(边集数组)

链式前向星

链式前向星