以下面这张有向图为例介绍4种存图的方式
1.邻接矩阵
邻接矩阵就是用二维数组的方式存图,边的权值就是二维数组里的信息,如1-5(权值为7)则edge[1][5]=7;我们默认自己到自己的权值为0,不邻接点的权值为INF(无穷大),构造出二维数组如下标所示。
1 | 2 | 3 | 4 | 5 | |
1 | 0 | 5 | 8 | INF | 7 |
2 | INF | 0 | INF | INF | 7 |
3 | INF | 6 | 0 | INF | INF |
4 | INF | INF | 9 | 0 | 5 |
5 | INF | 6 | INF | INF | 0 |
代码实现:
int a[maxn][maxn]; //maxn为最多的点数
int n,m; //点数,边数
scanf("%d%d",&n,&m);
memset(a,INF,sizeof(a)); //初始化邻接矩阵
for(int i=0,u,v,w;i<m;i++){ //依次输入每条边的信息,起点d,终点v,权值dis;
scanf("%d%d%d",&u,&v,&w);
a[u][v]=w;
//a[v][u]=w;无向图调用此语句
}
for(int i=1;i<=n;i++){ //使自己到自己的权值变为0
a[i][i]=0;
}
2.前向星
前向星使一种存储方式简单却很难使用的存储方式,存储方式为:将起点,终点,权值直接存储在结构体数组中