我认为我需要链式前向星和一个博客园--shuxin5``
很简单就是用数组模拟把相同起点的边挂在一起,换句话说就是链表的所有数据是从i出发的所有边的集合,于是需要用next来标记下一个边的编号
一个节点用结构体存储----struct edge
内部含有
一个head[i]数组:用来存储此节点的第一条边
我们可以通过head[i]快速找到从节点i出发的所有边
上文提到的next:来存储下一条边
我们可以通过next快速找到从同一个节点出发的下一条边
变量z: 存储边的终点
变量cnt: 存储边的总数
定义:
strcut edge{int next,z,cnt;}
初始化:初始化head[i]=-1
表示无边可连边
加边函数(这是关键
//加边操作:这段代码是核心,也很好理解就是不断把边的编号连在链表上(tot表示边的编号)
void AddEdge(int a,int b,int c)
{
//加边函数,连一条以a为起点到达b权值为c的边
node[tot].next = head[a];node[tot].to = b;node[tot].flag = c;head[a] = tot++;
}
遍历
for(int i=head[u];~i;i=edge[i].next){
//something
}
其实不难多写就背下来了