目录
1:链式前向星的概念解释
2:代码展现
链式前向星是一种非常好用的有向图存储方式,但是它的代码难度却有点大。作者在这上面花了很长的时间才弄懂。虽然有其他的博客大佬写的很好,但总感觉不太适合小白选手(比如说我)。
1:链式前向星的概念解释
在写链式前向星时,我们一般会用到四个数组,一个变量,大部分博客大佬用的是e[],w[],h[],ne[]和变量cnt。
解释:
(1)e[]:e[i]表示的是以i为编号的边的终点。(这里以i为编号的意思是在各个有向边都有一个独一无二的编号,注意是边,即就是两点一线的边)
(2)w[]:w[i]表示的是以i为编号的边的权值。
(3)h[]:h[x]表示的是以x为起点的最大的编号的边的编号。(注意这里的x是起点,而不再是边的编号)
(4)ne[]:ne[i]表示的是在编号为i的边存进去之前的一个他们两的起点一样的一个边的编号。
(5)cnt:计数器,记录边数。
2:代码展现:
#include<bits/stdc++.h>
using namespace std;
int n,m,w[100],e[100],ne[100],h[100],cnt=1;
void add(int a,int b,int c)
{e[cnt]=b;w[cnt]=c;ne[cnt]=h[a];h[a]=cnt;cnt++;
}
int main()
{cin>>n>>m;//分别表示节点数以及边数while(m--){int a,b,c;cin>>a>>b>>c;add(a,b,c);}for(int i=1;i<=n;i++){for(int j=h[i];j;j=ne[j]){cout<<"从"<<i<<"到"<<e[j]<<"的权值="<<w[j]<<endl;}}return 0;
}