存图最基本的方法有两种,分为邻接矩阵和邻接图。一般规模较大的图就是用邻接图来存图。他的优点是存图效率非常高,
只需要与边数成正比的空间,存储复杂度为**O(V+E)**,而且能储存重边。
邻接表可以通过结构体+指针,也可以通过结构体+数组,下面介绍结构体+数组的实现。
#include<bits/stdc++.h>
#define ll long long
#define maxn 100005
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define mem(a,x) memset(a,x,sizeof(a))
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
struct {
int value;
int to;
int next;
}edges[maxn];
int cnt=0,n,m;
int head[maxn];
void add(int u,int v,int value)
{
edges[cnt].to=v;
edges[cnt].value=value;
edges[cnt].next=head[u];
head[u]=cnt++;
edges[cnt].to=u;
edges[cnt].value=value;
edges[cnt].next=head[v];
head[v]=cnt++;
}
void Print(int x)
{
for(int i=1;i<=x;i++){
for(int j=head[i];j!=-1;j=edges[j].next){
printf("%d -> %d = %d\n",i,edges[j].to,edges[j].value);
}
}
}
int main()
{
cin>>n>>m;
mem(head,-1);
for(int i=1;i<=m;i++){
int x,y,v;
cin>>x>>y>>v;
add(x,y,v);
}
Print(n);
return 0;
}