首页 > 技术文章 > 图的存储方法,邻接表与邻接矩阵

ldy-miss 2016-09-20 21:27 原文

图的邻接表储存:

      邻接表是图的一种链式存储结构。对图的每个顶点建立一个单链表(n个顶点建立n个单链表),第i个单链表中的结点包含顶点Vi的所有邻接顶点。又称链接表。适用于稀疏图的存储。

1     scanf("%d%d",&n,&m);
2     memset(first,-1,sizeof(first));
3     for(i=1;i<=m;i++)
4     {
5         scanf("%d%d%d",&u[i],&v[i],&w[i]);
6         //关键
      next[i] = first[u[i]]; 7 first[u[i]] = i; 8 }

 

 

读取:

1 for(i=1;i<=n;i++)
2     {
3         k = first[i];
4         while(k != -1)
5         {
6             printf("%d %d %d\n",u[k],v[k],w[k]);
7             k = next[k];
8         }
9     }

 

 

邻接矩阵存储:

用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边或弧)的数据,这个二维数组称为邻接矩阵。用邻接矩阵表示图,很容易确定图中任意两个顶点是否有边相连。邻接矩阵分为有向图邻接矩阵和无向图邻接矩阵。对无向图(无向简单图)而言,邻接矩阵一定是对称的,而且对角线一定为零,有向图则不一定如此。

 

 

一个二维数组待存储图的各边,数组初始化为正无穷,相通则替换正无穷记录长度,到自己本身用 0 表示,使用时通过两点间在数组中存储的长度判断是否相通。适用于稠密图。

推荐阅读