图的两种存储结构及基本算法_图的存储结构算法

2020-02-28 其他范文 下载本文

图的两种存储结构及基本算法由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“图的存储结构算法”。

一、图的邻接矩阵存储

1.存储表示

#definevexnum10

typedefstruct{

vextypevexs[vexnum];

intarcs[vexnum][vexnum];}mgraph;

2.建立无向图的邻接矩阵算法

voidcreat(mgraph*g, inte){for(i=0;i

scanf(“%c”,&g->vexs[i]);

for(i=0;i

for(j=0;j

g->arcs[i][j]=0;

for(k=0;k

scanf(“%d,%d”,&i,&j);

g->arcs[i][j]=1;g->arcs[j][i]=1;} }

3.建立有向图的邻接矩阵算法

voidcreat(mgraph*g, inte){for(i=0;i

scanf(“%c”,&g->vexs[i]);

for(i=0;i

for(j=0;j

g->arcs[i][j]=0;

for(k=0;k

scanf(“%d,%d,%d”,&i,&j,&w);

g->arcs[i][j]=w;}

}

二、图的邻接表存储

1.邻接表存储表示

#definevexnum10

typedefstructarcnode{

intadjvex;

structarcnode*nextarc;

}Arcnode;

typedefstructvnode{

vextypedata;

Arcnode*firstarc;

}Vnode;

typedefstruct{

Vnodevertices[vexnum];

intvexnum,arcnum;

}algraph;

2.建立无向图的邻接表算法:

voidcreat(algraph*g, inte){

for(i=0;i

scanf(“%c”,&g->vertices[i]->data);

g->vertices[i]->firstarc=NULL;}

for(k=0;k

scanf(“%d,%d”,&i,&j);

q=(Arcnode*)malloc(sizeof(Arcnode));p=(Arcnode*)malloc(sizeof(Arcnode));p->adjvex=j;

p->nextarc=g->vertices[i]->firstarc;

g->vertices[i]->firstarc=p;

q->adjvex=i;

q->nextarc=g->vertices[j]->firstarc;

g->vertices[j]->firstarc=q;}

}

3.建立有向图邻接表算法:

voidcreat(algraph*g, inte){

for(i=0;i

scanf(“%c”,&g->vertices[i]->data);

g->vertices[i]->firstarc=NULL;}

for(k=0;k

scanf(“%d,%d”,&i,&j);

p=(Arcnode*)malloc(sizeof(Arcnode));p->adjvex=j;

p->nextarc=g->vertices[i]->firstarc;

g->vertices[i]->firstarc=p;}

}

三、图的遍历

1.连通图的深度优先搜索遍历

intvisited[vexnum]={0};

voiddfs(mgraph*g, inti){

printf(“%3c”,g->vexs[i]);

visited[i]=1;

for(j=0;j

if((g->arcs[i][j]==1)&&(!visited[j]))

dfs(g, j);}

2.联通图的广度优先搜索遍历

intvisited[vexnum]={0};

voidbfs(mgraph*g, intk){

intq[20], f, r;

f=0;r=0;

printf(“%3c”,g->vexs[k]);

visited[k]=1;

q[r]=k;r++;

while(r!=f){

i=q[f];f++;

for(j=0;j

if((g->arcs[i][j]==1)&&!visited[j]){

printf(“%3c”,g->vexs[j]);

visited[j]=1;

q[r]=j;r++;}

}

}

4.求图的联通分量

intvisited[vexnum]={0};

voidcomponent(mgraph*g){

intcount=0;

for(j=0;j

if(!visited[j]){

count++;

printf(“n第%d个联通分量:”, count);dfs(g, j);}

printf(“n 共有%d个联通分量。n”, count);}

《图的两种存储结构及基本算法.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
图的两种存储结构及基本算法
点击下载文档
相关专题 图的存储结构算法 两种 算法 结构 图的存储结构算法 两种 算法 结构
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文