本文记录一种图数据结构,它能够较为节省空间地存储图。
我们知道,邻接矩阵的空间复杂度是O(N^2),但是在稀疏图中,这显然是没必要的。实际上,使用O(N+M)的复杂度就能记录图结构。
#include <iostream>
#include <vector>
using namespace std;
// 链式前向星
struct Edge{
int next;
int to;
int v;
} edge[1000000];
int head[100000];
int cnt=0;
void add_edge(int a, int b, int c){
cnt++;
edge[cnt].to = b;
edge[cnt].v = c;
edge[cnt].next = head[a];
head[a] = cnt;
}
int main(){
int n, m, s, i, x, y, d;
scanf("%d %d %d", &n, &m, &s);
for(i=0;i<m;i++){
scanf("%d %d %d", &x, &y, &d);
add_edge(x, y, d);
}
for(int x=0;x<n;x++){
for(int i=head[x];i!=0;i=edge[i].next){
printf("%d->%d, value=%d\n", x, edge[i].to, edge[i].v);
}
}
return 0;
}