邻接表数组实现

 

邻接表

创建邻接表的代码如下。//双向图数据*2int n,m,i;int u[6],v[6],w[6];//u、v,w和next的数组比边数的最大值要大

int first[5],next[5]; //first的数组比点数的最大值要大

scanf("%d %d",&n,&m);

for(i=1;i<=n;i++)//初始化first数组下标1~n的值为-1,表示1~n顶点暂时都没有边

first[i]=-1;

for(i=1;i<=m;i++)

{

scanf("%d %d %d",&u[i],&v[i],&w[i]);//读入每一条边

next[i]=first[u[i]];

first[u[i]]=i;

}

遍历1号顶点所有边的代码如下。

k=first[1];// 1号顶点其中的一条边的编号(其实也是最后读入的边)

while(k!=-1) //其余的边都可以在next数组中依次找到

{

printf("%d %d %d\n",u[k],v[k],w[k]);

k=next[k];

}

遍历每个顶点的所有边的代码如下。

for(i=1;i<=n;i++)

{

k=first[i];

while(k!=-1)

{

printf("%d %d %d\n",u[k],v[k],w[k]);

k=next[k];

}}

时间空间复杂度是O(M),遍历每一条边的时间复杂度是也是O(M)。

如果一个图是稀疏图的话,M要远小于N2。

因此稀疏图选用邻接表来存储要比邻接矩阵来存储要好很多。

www.99jianzhu.com/包含内容:建筑图纸、PDF/word/ppt 流程,表格,案例,最新,免费下载,施工方案、工程书籍、建筑论文、合同表格、标准规范、CAD图纸等内容。


TOP最近更新内容

    长城小学关爱留守儿童工作制度
    园林史名词解释
  • 上一篇:全国生物学联赛分类汇编《动物形态解剖》部分
  • 下一篇:家长发言稿