邻接链表存图,在这里其实是用数组进行模拟的
又叫做链式存储法,本来是要用链表实现的,但大多数情况下只需要用数组模拟即可
例:
u(边的起点) | v(边的终点) | w(边的权值) |
4 | 2 | 1 |
1 | 2 | 3 |
1 | 4 | 1 |
1 | 5 | 2 |
4 | 3 | 4 |
2 | 3 | 1 |
话不多说,直接上代码
for(int i=1;i<=m;i++) { scanf("%d%d%d",&u1,&v1,&w1); e[i].u =u1;//赋给第i条边的起点 e[i].v =v1;//赋给第i条边的终点 e[i].w =w1;//赋给第i条边的权值 e[i].next =head[u1];//现在这条边的上一条边=现在这条边的起点的上一条边(u1是起点) head[u1]=i;//于是,对于以后的边来说,现在这条边就是起点的上一条边 }
注:e[i]为一个结构体,负责记录每一条边的信息
struct Node{ int u;//边的起点 int v;//边的终点 int w;//边的权值 int next;//边的上一条边(用于连接) }e[边的最大条数];
总的来说,这是一种存图的方法,更是图论的基础