图的邻接表储存:
邻接表是图的一种链式存储结构。对图的每个顶点建立一个单链表(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 表示,使用时通过两点间在数组中存储的长度判断是否相通。适用于稠密图。