链式前向星
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)
以上是关于链式前向星的主要内容,如果未能解决你的问题,请参考以下文章