实验四图的遍历与应用广度优先遍历Word格式.docx
- 文档编号:19598641
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:8
- 大小:123.37KB
实验四图的遍历与应用广度优先遍历Word格式.docx
《实验四图的遍历与应用广度优先遍历Word格式.docx》由会员分享,可在线阅读,更多相关《实验四图的遍历与应用广度优先遍历Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
{
DataTypedata[MAXSIZE];
intfront,rear;
}SeqQueue,*PSeqQueue;
PSeqQueueInit_SeqQueue()/*隊列初始化*/
PSeqQueueQ;
Q=(PSeqQueue)malloc(sizeof(SeqQueue));
if(Q)
{
Q->
front=0;
rear=0;
}
returnQ;
}
intIn_SeqQueue(PSeqQueueQ,DataTypex)/*入隊操作*/
if((Q->
rear+1)%MAXSIZE==Q->
front)
printf("
隊滿"
);
return-1;
}
else
rear=(Q->
rear+1)%MAXSIZE;
data[Q->
rear]=x;
return1;
intEmpty_SeqQueue(PSeqQueueQ)/*判斷隊空*/
if(Q&
&
Q->
front==Q->
rear)
return
(1);
return(0);
intOut_SeqQueue(PSeqQueueQ,DataType*x)/*出對操作*/
if(Empty_SeqQueue(Q))
隊空"
front=(Q->
front+1)%MAXSIZE;
*x=Q->
front];
typedefstructnode/*表结点*/
intadjvex;
/*邻接点域,一般是放顶点对应的序号或在表头向量中的下标*/
charInfo;
/*与边(或弧)相关的信息*/
structnode*next;
/*指向下一个邻接点的指针域*/
}EdgeNode;
typedefstructvnode/*顶点结点*/
{
charvertex;
/*顶点域*/
EdgeNode*firstedge;
/*边表头指针*/
}VertexNode;
typedefstruct
VertexNodeadjlist[MaxVerNum];
/*邻接表*/
intn,e;
/*顶点数和边数*/
}ALGraph;
/*ALGraph是以邻接表方式存储的图类型*/
voidVisit(DataTypew)
printf("
%d"
w);
//建立一个无向图的邻接表存储的算法如下:
voidCreateALGraph(ALGraph*G)/*建立有向图的邻接表存储*/
inti,j,k;
/*intN,E;
*/
EdgeNode*p;
请输入顶点数和边数:
"
scanf("
%d%d"
&
G->
n,&
e);
n=%d,e=%d\n\n"
G->
n,G->
getchar();
for(i=0;
i<
n;
i++)/*建立有n个顶点的顶点表*/
printf("
请输入第%d个顶点字符信息(共%d个):
i+1,G->
n);
scanf("
%c"
(G->
adjlist[i].vertex));
/*读入顶点信息*/
getchar();
G->
adjlist[i].firstedge=NULL;
/*顶点的边表头指针设为空*/
for(k=0;
k<
2*G->
e;
k++)/*建立边表*/
请输入边<
Vi,Vj>
对应的顶点序号(共%d个):
2*G->
i,&
j);
/*读入边<
的顶点对应序号*/
p=(EdgeNode*)malloc(sizeof(EdgeNode));
//生成新边表结点p
p->
adjvex=j;
/*邻接点序号为j*/
next=G->
adjlist[i].firstedge;
/*将结点p插入到顶点Vi的链表头部*/
adjlist[i].firstedge=p;
\n图已成功创建!
对应的邻接表如下:
\n"
i++)
p=G->
%c->
adjlist[i].vertex);
while(p!
=NULL)
{
printf("
[%c]"
adjlist[p->
adjvex].vertex);
p=p->
next;
}
}/*CreateALGraph*/
intFirstAdjVertex(ALGraph*g,intv)//找图g中与顶点v相邻的第一个顶点
if(g->
adjlist[v].firstedge!
=NULL)return(g->
adjlist[v].firstedge)->
adjvex;
elsereturn0;
intNextAdjVertex(ALGraph*g,intvi,intvj)//找图g中与vi相邻的,相对相邻顶点vj的下一个相邻顶点
p=g->
adjlist[vi].firstedge;
while(p!
=NULL&
p->
adjvex!
=vj)p=p->
if(p!
next!
=NULL)returnp->
next->
voidBFS(ALGraph*G,intv)
/*從v出發按廣度優先遍歷圖G;
使用輔助隊列Q和訪問標誌數組visited*/
intu,w;
/*定義一個隊列*/
Q=Init_SeqQueue();
/*置空的隊列Q*/
Visit(v);
/*訪問v,注意Visit函數和visited數組的區別*/
visited[v]=True;
/*把訪問標誌置True*/
In_SeqQueue(Q,v);
/*v入隊列*/
while(!
Empty_SeqQueue(Q))
Out_SeqQueue(Q,&
u);
/*出隊列*/
for(p=G->
adjlist[u].firstedge;
p;
p=p->
next)
w=p->
if(!
visited[w])
Visit(w);
visited[w]=True;
In_SeqQueue(Q,w);
/*u的尚未訪問的鄰接頂點w入隊列Q*/
}/*BFS*/
voidBFStraverse(ALGraphG)
intv;
for(v=0;
v<
G.n;
v++)
visited[v]=False;
visited[v])BFS(&
G,v);
voidmain()
ALGraphG;
CreateALGraph(&
G);
该无向图的廣度优先搜索序列为:
BFStraverse(G);
\nSuccess!
广度优先遍历实验结果截图:
欢迎下载,谢谢观看!
资料仅供参考学习
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 遍历 应用 广度 优先