数据结构与算法实验报告图Word格式文档下载.docx

上传人:b****6 文档编号:19628912 上传时间:2023-01-08 格式:DOCX 页数:9 大小:17.67KB
下载 相关 举报
数据结构与算法实验报告图Word格式文档下载.docx_第1页
第1页 / 共9页
数据结构与算法实验报告图Word格式文档下载.docx_第2页
第2页 / 共9页
数据结构与算法实验报告图Word格式文档下载.docx_第3页
第3页 / 共9页
数据结构与算法实验报告图Word格式文档下载.docx_第4页
第4页 / 共9页
数据结构与算法实验报告图Word格式文档下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据结构与算法实验报告图Word格式文档下载.docx

《数据结构与算法实验报告图Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实验报告图Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。

数据结构与算法实验报告图Word格式文档下载.docx

//须将队列定义中DataType改为int

EdgeNode*p;

InitQueue(&

Q);

//队列初始化

//访问源点vk

printf("

visitvertex:

%e"

,G->

adjlist[k].vertex);

visited[k]=TRUE;

EnQueue(&

Q,k);

//vk已访问,将其人队。

(实际上是将其序号人队)

while(!

QueueEmpty(&

Q)){//队非空则执行

i=DeQueue(&

//相当于vi出队

p=G->

adjlist[i].firstedge;

//取vi的边表头指针

while(p){//依次搜索vi的邻接点vj(令p->

adjvex=j)

if(!

visited[p->

adivex]){//若vj未访问过

visitvertex:

%c"

,C->

adjlistlp->

adjvex].vertex);

//访问vj

visited[p->

adjvex]=TRUE;

Q,p->

adjvex);

//访问过的vj人队

}//endif

p=p->

next;

//找vi的下一邻接点

}//endwhile

}//endofBFS

(2)邻接矩阵表示的图的广度优先搜索算法

voidBFSM(MGraph*G,intk)

{以vk为源点对用邻接矩阵表示的图G进行广度优先搜索

inti,j;

InitQueue(&

vexs[k]);

Q)){

//vi出队

for(j=0;

j<

G->

n;

j++)//依次搜索vi的邻接点vj

if(G->

edges[i][j]==1&

&

!

visited[j]){//vi未访问

vexs[j]);

//访问vi

visited[j]=TRUE;

Q,j);

//访问过的vi人队

}

}//BFSM

2.邻接表

#include<

stdio.h>

malloc.h>

#defineMAX_NUM20

#defineOK1

#defineERROR-1

typedefintElemType;

typedefcharVertexType;

typedefstructArcNode

{//定义弧结点

ElemTypedata;

ArcNode*nextarc;

}ArcNode,*ArcLink;

typedefstructVNode

{//定义顶点结点

VertexTypedata;

ArcLinkfirstarc;

}VNode,AdjList[MAX_NUM];

typedefstruct

{

AdjListvdata;

intvexnum,arcnum;

}ALGraph;

//构建图的邻接表

intCreategraph(ALGraph&

G,intn){

ArcLinkp;

inte,i;

charv,w;

for(i=0;

i<

i++){

G.vdata[i].data='

A'

+i;

G.vdata[i].firstarc=NULL;

}

printf("

输入边的个数:

\n"

);

scanf("

%d"

&

e);

e;

i++)

getchar();

//接收scanf的回车符

请输入某边所依附的两个顶点用A--%C表示\n"

'

+n-1);

%c%c"

v,&

w);

//fflush(stdin);

V=%c,W=%c,I=%d\n"

v,w,i);

p=(ArcLink)malloc(sizeof(ArcNode));

p->

data=(int)(w-'

+1);

%d\n"

p->

data);

nextarc=G.vdata[(int)(v-'

)].firstarc;

G.vdata[(int)(v-'

)].firstarc=p;

p=(ArcLink)malloc(sizeof(ArcNode));

data=(int)(v-'

nextarc=G.vdata[(int)(w-'

G.vdata[(int)(w-'

G.vexnum=n;

G.arcnum=e;

returnOK;

//输出邻接表

intprintGraph(ALGraphG){

inti;

G.vexnum;

%2d%c"

i,G.vdata[i]);

for(p=G.vdata[i].firstarc;

p!

=NULL;

p=p->

nextarc){

-->

"

intmain()

ALGraphG;

intn;

请输入你要构建的无向图的顶点个数:

n);

Creategraph(G,n);

你所构建的无向图的邻接表如下所示:

printGraph(G);

#defineMaxVertexNum20//最大顶点数,应由用户定义

//顶点类型应由用户定义

typedefintEdgeType;

//边上的权值类型应由用户定义

//定义图的种类类型,yxt有向图,yxw有向网,wxt无向图,wxw无向网

typedefenum{yxt,yxw,wxt,wxw}GraphKind;

typedefstruct

VertexTypevexs[MaxVertexNum];

//顶点表

//邻接矩阵,可看作边表,如果是无权图,1:

相邻,0:

不相邻

EdgeTypeedges[MaxVertexNum][MaxVertexNum];

intn;

inte;

//图中当前的顶点数和边数

GraphKindgkind;

//图的种类标示

}MGraph;

//函数声明

intcreatWxw(MGraph*G);

intcreatYxt(MGraph*G);

intcreatYxw(MGraph*G);

intcreatWxt(MGraph*G);

voidprintGraph(MGraph*G)

inti,j;

for(i=0;

{

for(j=0;

j++)

%d"

G->

edges[i][j]);

//根据不同的种类构建不同的图

intcreatGraph(MGraph*G)

输入图的种类,0:

有向图,1:

有向网,2:

无向图,3:

无向网:

scanf("

(G->

gkind));

switch(G->

gkind)

{

case0:

returncreatYxt(G);

break;

case1:

returncreatYxw(G);

case2:

returncreatWxt(G);

case3:

returncreatWxw(G);

default:

returnERROR;

}

//创建无向网,网指的是具有权值的图

intcreatWxw(MGraph*G)

inti=0,j=0,k=0;

charv1,v2;

//弧的两个结点

intw;

//权值

输入图的结点数:

输入图的边数:

getchar();

//输入结点

输入结点,用大写字母标示(要求第一个顶点是A),如:

A:

%c"

vexs[i]);

//初始化邻接矩阵

G->

edges[i][j]=-1;

//输入边连接的两个结点

for(k=0;

k<

k++)

//i,j作为矩阵的行和列

输入弧和权值:

%c%c%d"

v1,&

v2,&

i=v1-'

;

j=v2-'

edges[i][j]=w;

edges[j][i]=w;

returnOK;

MGraphG;

creatGraph(&

G);

printGraph(&

return0;

五、成绩评定

及格

不及格

出勤

内容

格式

创新

效果

总评

指导教师:

年月日

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

当前位置:首页 > PPT模板 > 自然景观

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

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