链式前向星
链式前向星
本质:模拟链表的操作,链式存储图。
head[x]相当于一维代表了出发点,之后T[i].next一条链相当于二维代表了所有(与它)连接的点。(不连接的到-1就停止了)。
核心代码:
1 | void add(int u,int v,int w) |
如果是遍历
1 | for(int i=head[u];i!=-1;i=e[i].next) |
5 7 1 2 1 2 3 2 3 4 3 1 3 4 4 1 5 1 5 6 4 5 7
假设有这些边 1 5 6 1 3 4 1 2 1
2 3 2
3 4 3
4 5 7 4 1 5
对于1 2 1这条边:edge[0].to = 2; edge[0].next = -1; head[1] = 0;
对于2 3 2这条边:edge[1].to = 3; edge[1].next = -1; head[2] = 1;
对于3 4 3这条边:edge[2].to = 4; edge[2],next = -1; head[3] = 2;
对于1 3 4这条边:edge[3].to = 3; edge[3].next = 0; head[1] = 3;
对于4 1 5这条边:edge[4].to = 1; edge[4].next = -1; head[4] = 4;
对于1 5 6这条边:edge[5].to = 5; edge[5].next = 3; head[1] = 5;
对于4 5 7这条边:edge[6].to = 5; edge[6].next = 4; head[4] = 6;
最终我们从4节点开始遍历的话,会先是4 5 7,然后是4 1 5,然后结束
如果我们从节点1开始遍历,会先是 1 5 6,然后是 1 3 4,然后是1 2 1
这样在遍历时是倒着遍历的,也就是说与输入顺序是相反的,不过这样不影响结果的正确性.
大致是这样,想必看着样例也大概理解了
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Totoroの旅!
评论