前提:理解好什么是前向星?参照上一篇博客,然后看本文,会有所帮助
第二次更新讲解的内容
- head[]数组保存的是当前边的起点u 在边集数组中的位置
- next表示的是下一条边的位置,那么如何保存呢?我们并不是保存所有的边数,只是保存下一边的位置,和链表非常类似,所以就是链式,这就是点题
- 但是和我们常见的链式不太一样,我们是从后向前找,所以需要在更新head的时候,需要先记录下上一条边的位置,所以代码部分
e[cnt].next = head[u]; head[u] = cnt++; 是先保存next,在更新数值,然后递归输出结果
- 所以有了下面的代码
- 刷题目熟悉技巧,重中之重了
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 10000;
struct Edge
{
int u, v, w ,next;
}e[maxn];
int head[maxn],cnt =1;
void addEdge(int u, int v, int w){
e[cnt].u = u;
e[cnt].v = v;
e[cnt].w = w;
e[cnt].next = head[u];
head[u] = cnt++;
}
void finde(int k)
{
if(k != -1)
{
cout << e[k].u << " " << e[k].v << " " << e[k].w << endl;
finde(e[k].next);
}
}
int main