图的遍历演示Word文件下载.docx

上传人:b****6 文档编号:17621290 上传时间:2022-12-07 格式:DOCX 页数:6 大小:15.77KB
下载 相关 举报
图的遍历演示Word文件下载.docx_第1页
第1页 / 共6页
图的遍历演示Word文件下载.docx_第2页
第2页 / 共6页
图的遍历演示Word文件下载.docx_第3页
第3页 / 共6页
图的遍历演示Word文件下载.docx_第4页
第4页 / 共6页
图的遍历演示Word文件下载.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

图的遍历演示Word文件下载.docx

《图的遍历演示Word文件下载.docx》由会员分享,可在线阅读,更多相关《图的遍历演示Word文件下载.docx(6页珍藏版)》请在冰豆网上搜索。

图的遍历演示Word文件下载.docx

bool*visited;

//访问标志数组

//图的邻接矩阵存储结构

typedefstruct{

char*vexs;

//顶点向量

intarcs[MAX_VEX][MAX_VEX];

//邻接矩阵

intvexnum,arcnum;

//图的当前顶点数和弧数

}Graph;

//队列类

classQueue{

public:

voidInitQueue(){

base=(int*)malloc(QUEUE_SIZE*sizeof(int));

front=rear=0;

}

voidEnQueue(inte){

base[rear]=e;

rear=(rear+1)%QUEUE_SIZE;

voidDeQueue(int&

e){

e=base[front];

front=(front+1)%QUEUE_SIZE;

int*base;

intfront;

intrear;

};

//图G中查找元素c的位置

intLocate(GraphG,charc){

for(inti=0;

i<

G.vexnum;

i++)

if(G.vexs[i]==c)returni;

return-1;

//创建无向网

voidCreateUDN(Graph&

G){

inti,j,w,s1,s2;

chara,b,temp;

printf("

输入顶点数和弧数:

"

);

scanf("

%d%d"

&

G.vexnum,&

G.arcnum);

temp=getchar();

//接收回车

G.vexs=(char*)malloc(G.vexnum*sizeof(char));

//分配顶点数目

输入%d个顶点.\n"

G.vexnum);

for(i=0;

i++){//初始化顶点

输入顶点%d:

i);

%c"

G.vexs[i]);

i++)//初始化邻接矩阵

for(j=0;

j<

j++)

G.arcs[i][j]=INFINITY;

输入%d条弧.\n"

G.arcnum);

G.arcnum;

i++){//初始化弧

输入弧%d:

%c%c%d"

a,&

b,&

w);

//输入一条边依附的顶点和权值

s1=Locate(G,a);

s2=Locate(G,b);

G.arcs[s1][s2]=G.arcs[s2][s1]=w;

//图G中顶点k的第一个邻接顶点

intFirstVex(GraphG,intk){

if(k>

=0&

&

k<

G.vexnum){//k合理

if(G.arcs[k][i]!

=INFINITY)returni;

//图G中顶点i的第j个邻接顶点的下一个邻接顶点

intNextVex(GraphG,inti,intj){

if(i>

i<

G.vexnum&

j>

j<

G.vexnum){//i,j合理

for(intk=j+1;

k<

k++)

if(G.arcs[i][k]!

=INFINITY)returnk;

//深度优先遍历

voidDFS(GraphG,intk){

inti;

if(k==-1){//第一次执行DFS时,k为-1

if(!

visited[i])DFS(G,i);

//对尚未访问的顶点调用DFS

else{

visited[k]=true;

%c"

G.vexs[k]);

//访问第k个顶点

for(i=FirstVex(G,k);

i>

=0;

i=NextVex(G,k,i))

//对k的尚未访问的邻接顶点i递归调用DFS

//广度优先遍历

voidBFS(GraphG){

intk;

QueueQ;

//辅助队列Q

Q.InitQueue();

visited[i]){//i尚未访问

visited[i]=true;

G.vexs[i]);

Q.EnQueue(i);

//i入列

while(Q.front!

=Q.rear){

Q.DeQueue(k);

//队头元素出列并置为k

for(intw=FirstVex(G,k);

w>

w=NextVex(G,k,w))

visited[w]){//w为k的尚未访问的邻接顶点

visited[w]=true;

G.vexs[w]);

Q.EnQueue(w);

//主函数

voidmain(){

GraphG;

CreateUDN(G);

visited=(bool*)malloc(G.vexnum*sizeof(bool));

\n广度优先遍历:

"

visited[i]=false;

DFS(G,-1);

\n深度优先遍历:

BFS(G);

\n程序结束.\n"

输出结果为(红色为键盘输入的数据,权值都置为1):

89

输入8个顶点.

输入顶点0:

a

输入顶点1:

b

输入顶点2:

c

输入顶点3:

d

输入顶点4:

e

输入顶点5:

f

输入顶点6:

g

输入顶点7:

h

输入9条弧.

输入弧0:

ab1

输入弧1:

bd1

输入弧2:

be1

输入弧3:

dh1

输入弧4:

eh1

输入弧5:

ac1

输入弧6:

cf1

输入弧7:

cg1

输入弧8:

fg1

广度优先遍历:

abdhecfg

深度优先遍历:

abcdefgh

程序结束.

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

当前位置:首页 > 高中教育 > 理化生

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

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