图的算法2Word格式.docx

上传人:b****3 文档编号:15823835 上传时间:2022-11-16 格式:DOCX 页数:10 大小:25.92KB
下载 相关 举报
图的算法2Word格式.docx_第1页
第1页 / 共10页
图的算法2Word格式.docx_第2页
第2页 / 共10页
图的算法2Word格式.docx_第3页
第3页 / 共10页
图的算法2Word格式.docx_第4页
第4页 / 共10页
图的算法2Word格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

图的算法2Word格式.docx

《图的算法2Word格式.docx》由会员分享,可在线阅读,更多相关《图的算法2Word格式.docx(10页珍藏版)》请在冰豆网上搜索。

图的算法2Word格式.docx

structSLNode*Next;

}slnodetype;

slnodetype*Head;

slnodetype*Rear;

}qqtype;

intInitiateQQueue(qqtype*q)

if((q->

Head=(slnodetype*)malloc(sizeof(slnodetype)))==NULL)

{

printf("

\n申请空间失败!

"

);

return0;

}

q->

Rear=q->

Head;

Head->

Next=NULL;

return1;

}

intAppendQQueue(qqtype*q,elemtypex)//进队列操作。

slnodetype*p;

if((p=(slnodetype*)malloc(sizeof(slnodetype)))==NULL)

p->

Data=x;

Rear->

Next=p;

Rear=p;

elemtypeDeleteQQueue(qqtype*q)//出队列操作算法。

elemtypex;

if(q->

Next==NULL)

Next==q->

Rear)

{q->

p=q->

Next;

x=p->

Data;

else{p=q->

Next=p->

x=p->

free(p);

returnx;

intNotEmtyQQueue(qqtype*q)

Rear==q->

Head)return0;

elsereturn1;

intLocVertex(adjlisttypeGraph,intv)

intk;

for(k=0;

k<

MAXNNODE;

k++)//有些不合理。

if(Graph[k].Vertex==v)

return(k);

return0;

intFirstVertex(adjlisttypeGraph,intv)//求图中顶点v的第一条相邻的无向边的顶点。

arctype*p;

v=LocVertex(Graph,v);

p=Graph[v].FirstArc;

if(p==NULL)return-1;

else

return(Graph[p->

AdjVertex].Vertex);

intNextVertex(adjlisttypeGraph,intv,intw)//求图的顶点v相邻顶点w的下一个相邻无向边。

while(p!

=NULL&

&

Graph[p->

AdjVertex].Vertex!

=w)

p=p->

NextArc;

if(p->

NextArc==NULL||p==NULL)

printf("

参数出错!

\n"

return(-1);

p=p->

voidDeleteArc(adjlisttypeGraph,intv,intw)//删除无向图v与w的边。

arctype*r1,*r2;

w=LocVertex(Graph,w);

r1=Graph[v].FirstArc;

//在v中删除w结点。

r2=r1;

while(r1!

r1->

AdjVertex!

=w)

{

r1=r1->

if(r1==NULL)

\n无此边"

return;

elseif(r1==r2)

Graph[v].FirstArc=r1->

free(r1);

}

else

r2->

NextArc=r1->

free(r1);

r1=Graph[w].FirstArc;

//在w中删除v结点。

=v)

Graph[w].FirstArc=r1->

voidBFSearch(adjlisttypeGraph,intk,intVisited[])

arctype*p;

qqtypea,*QQueue=&

a;

intw;

InitiateQQueue(QQueue);

Visited[k]=1;

%d"

Graph[k].Vertex);

AppendQQueue(QQueue,k);

while(NotEmtyQQueue(QQueue)==1)

w=DeleteQQueue(QQueue);

p=Graph[w].FirstArc;

while(p!

=NULL)

{if(Visited[p->

AdjVertex]==0)

{

Visited[p->

AdjVertex]=1;

printf("

Graph[p->

AppendQQueue(QQueue,p->

AdjVertex);

}

p=p->

}

voidTrave(adjlisttypeGraph,intn)

inti,Visited[MAXNNODE];

for(i=0;

i<

n;

i++)

Visited[i]=0;

//printf("

1111"

for(i=0;

if(Visited[i]==0)BFSearch(Graph,i,Visited);

2222"

voidmain()

inti,j,n,e,k;

intv1,v2,v,w;

arctype*p,*q;

adjlisttypeGraph;

输入图中顶点的个数n:

scanf("

%d"

&

n);

输入图中顶点的边数e:

e);

输入顶点的数据:

for(k=0;

k++)

Graph[k].Vertex);

Graph[k].FirstArc=NULL;

//Graph[k].FirstArc->

NextArc=NULL;

\n输入图中各边:

//输入各边并将相应的边结点插入到链表中

e;

%d%d"

v1,&

v2);

//注意是这样输入,如:

13。

i=LocVertex(Graph,v1);

j=LocVertex(Graph,v2);

q=(arctype*)malloc(sizeof(arctype));

AdjVertex=j;

NextArc=Graph[i].FirstArc;

Graph[i].FirstArc=q;

p=(arctype*)malloc(sizeof(arctype));

AdjVertex=i;

NextArc=Graph[j].FirstArc;

Graph[j].FirstArc=p;

\n图的邻接表结构为:

Graph[%d]."

i);

v1=Graph[i].Vertex;

Vertex%d:

v1);

p=Graph[i].FirstArc;

while(p!

v2=p->

AdjVertex;

-->

v2);

输出广度优先搜索结果:

Trave(Graph,n);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1