数据结构实验图的基本操作文档格式.docx

上传人:b****5 文档编号:19352919 上传时间:2023-01-05 格式:DOCX 页数:23 大小:88.57KB
下载 相关 举报
数据结构实验图的基本操作文档格式.docx_第1页
第1页 / 共23页
数据结构实验图的基本操作文档格式.docx_第2页
第2页 / 共23页
数据结构实验图的基本操作文档格式.docx_第3页
第3页 / 共23页
数据结构实验图的基本操作文档格式.docx_第4页
第4页 / 共23页
数据结构实验图的基本操作文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据结构实验图的基本操作文档格式.docx

《数据结构实验图的基本操作文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验图的基本操作文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

数据结构实验图的基本操作文档格式.docx

//顶点的名称为字符

constintMaxVertexNum=10;

//图的最大顶点数

constintMaxEdgeNum=100;

//边数的最大值

typedefintWeightType;

//权值的类型

constWeightTypeMaxValue=32767;

//权值的无穷大表示

typedefVertexTypeVexlist[MaxVertexNum];

//顶点信息,定点名称

typedefWeightTypeAdjMatrix[MaxVertexNum][MaxVertexNum];

//邻接矩阵

typedefenum{DG,DN,AG,AN}GraphKind;

//有向图,有向网,无向图,无向网

typedefstruct{

Vexlistvexs;

//顶点数据元素

AdjMatrixarcs;

//二维数组作邻接矩阵

intvexnum,arcnum;

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

GraphKindkind;

//图的种类标志

}MGraph;

voidCreateGraph(MGraph&

G,GraphKindkd)//采用数组邻接矩阵表示法,构造图G

{//构造有向网G

inti,j,k,q;

charv,w;

G.kind=kd;

//图的种类

printf("

输入要构造的图的顶点数和弧数:

\n"

);

scanf("

%d,%d"

&

G.vexnum,&

G.arcnum);

getchar();

//过滤回车

依次输入图的顶点名称ABCD...等等:

for(i=0;

i<

G.vexnum;

i++)scanf("

%c"

G.vexs[i]);

//构造顶点数据

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

for(j=0;

j<

j++)

if(kd==DN||kd==AN)

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

//网,初始值为无穷大

else

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

//图,初始为0

if(kd==DN||kd==AN)

printf("

按照:

尾顶点名->

头顶点名,权值输入数据:

如A->

B,23\n"

else

头顶点名输入数据:

A->

B\n"

for(k=0;

k<

G.arcnum;

k++){//构造邻接矩阵

if(kd==DN||kd==AN)

%c->

%c,%d"

v,&

w,&

q);

//输入弧的两个定点及该弧的权重

else

scanf("

w);

getchar();

for(i=0;

i<

i++)

if(G.vexs[i]==v)break;

//查找出v在vexs[]中的位置i

if(i==G.vexnum){cerr<

<

"

vertexERROR!

;

exit

(1);

}

for(j=0;

j<

if(G.vexs[j]==w)break;

//查找出v在vexs[]中的位置j

if(j==G.vexnum){cerr<

if(kd==AN)//无向网

{

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

//邻接矩阵对应位置置权值

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

//无向图为对称矩阵

}

elseif(kd==DN)//有向网

elseif(kd==AG)//无向图

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

//对称矩阵

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

else//有向图

//getchar();

}

}//CreateGraph

/*注意输入格式,按以下方式输入

构造有向网

输入要构造的网的顶点数和弧数:

4,5

依次输入网的顶点名称ABCD...等等:

abcd

B,23

a->

b,5

c,8

c->

b,7

d,4

d->

c,3

输出邻接矩阵

∞|5|8|4|

∞|∞|∞|∞|

∞|7|∞|∞|

∞|∞|3|∞|

Pressanykeytocontinue

*/

voidPrintMGraph(MGraph&

G)

{

inti,j;

switch(G.kind)

{

caseDG:

printf("

%2.d|"

G.arcs[i][j]);

}

break;

caseDN:

j++){

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

=MaxValue)printf("

elseprintf("

∞|"

}

caseAG:

caseAN:

//********完成构造无向网****************

/*请模仿编写无向网*/

for(i=0;

}

//*****************完成函数**********************************

voidcountdig(MGraphG)//请完成计算图的入度或初度

if(G.kind==DG||G.kind==DN)

//计算有向图或网的各个顶点的入度及出度

intoutD,inD;

inti,j;

i++){

outD=inD=0;

for(j=0;

j++){

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

=0&

&

G.arcs[i][j]!

=MaxValue)

outD++;

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

G.arcs[j][i]!

inD++;

%c:

出度是%d,入度是%d\n"

G.vexs[i],outD,inD);

//计算无向图或网的度

intDu;

Du=0;

Du++;

%c的度是%d\n"

G.vexs,Du);

//************参照p265设计深度有限搜索***********

voidDFSMatrix(MGraphG,inti,intn,bool*visited)

cout<

G.vexs[i]<

'

'

visited[i]=true;

for(intj=0;

n;

j++)

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

=MaxValue&

!

visited[j])

DFSMatrix(G,j,n,visited);

//************参照p268设计广度有限搜索***********

voidBFSMatrix(MGraphG,inti,intn,bool*visited)

constintMaxSize=30;

intq[MaxSize]={0};

intfront=0,rear=0;

q[++rear]=i;

while(front!

=rear){

front=(front+1)%MaxSize;

intk=q[front];

visited[j]){

G.vexs[j]<

visited[j]=true;

rear=(rear+1)%MaxSize;

q[rear=j];

voidmain()

MGraphG;

intk;

请选择图的种类:

0:

有向图,1:

有向网,2:

无向图,3:

无向网.请选择:

%d"

k);

switch(k){//DG,DN,AG,AN

case0:

构造有向图\n"

CreateGraph(G,DG);

//采用数组邻接矩阵表示法,构造有向图

break;

case1:

构造有向网\n"

CreateGraph(G,DN);

//采用数组邻接矩阵表示法,构造有向网AGG

case2:

构造无向图\n"

CreateGraph(G,AG);

//采用数组邻接矩阵表示法,构造无向图AGG

case3:

构造无向网\n"

CreateGraph(G,AN);

//采用数组邻接矩阵表示法,构造无向网AGG

PrintMGraph(G);

//打印图的邻接矩阵

bool*visited=newbool[G.vexnum];

inti;

按图的邻接矩阵得到的深度优先遍历序列"

endl;

for(i=0;

i++)visited[i]=false;

DFSMatrix(G,0,G.vexnum,visited);

按图的邻接矩阵得到的广度优先遍历序列"

BFSMatrix(G,0,G.vexnum,visited);

度:

countdig(G);

258:

//p-258图的存储结构以邻接表表示,构造图的算法。

//已完成若干函数,对尚未完成的请补全

//请注意输入格式,按以下方式构建一个图

/*

构造有向图

输入要构造的有向图的顶点数和弧数:

头顶点名输入数据:

B

b

c

d

constintMaxVertexNum=10;

constintMaxEdgeNum=100;

constWeightTypeMaxValue=32767;

typedefVertexTypeVexlist[MaxVertexNum];

typedefenum{DG,DN,AG,AN}GraphKind;

structEdgeNode{//链表边结点,表示弧

intadjvex;

//存放及头结点顶点有关的另一个顶点在邻接表(数组)中的下标。

EdgeNode*next;

//指向链表下一个结点

WeightTypeinfo;

//权重值,或为该弧相关信息

};

typedefstructVNode{//邻接表,表示顶点

VertexTypedata;

//顶点数据,顶点名称

EdgeNode*firstarc;

//指向边结点链表第一个结点

}VNode,AdjList[MaxVertexNum];

AdjListvertices;

}ALGraph;

voidCreateGraph_DG(ALGraph&

G){//构造有向图G

EdgeNode*p;

inti,j,k;

charv,w;

G.kind=DG;

i++){

scanf("

G.vertices[i].data);

G.vertices[i].firstarc=NULL;

//初始化指向链表指针

B\n"

k++){

if(G.vertices[i].data==v)break;

//查找出v在vertices[]中的位置i

for(j=0;

if(G.vertices[j].data==w)break;

//查找出w在vertices[]中的位置i

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

//申请弧结点

p->

adjvex=j;

//置入弧尾顶点号

info=MaxValue;

//图的权值默认为无穷大

p->

next=G.vertices[i].firstarc;

//插入链表

G.vertices[i].firstarc=p;

////////////////////////////////////////////////////////////////////////////////////////////////

voidCreateGraph_DN(ALGraph&

G)//构造有向网G

{

WeightTypeq;

G.kind=DN;

输入要构造的有向网的顶点数和弧数:

头顶点名,权值输入数据:

B,8\n"

info=q;

voidCreateGraph_AG(ALGraph&

G)//构造无向图G

G.kind=AG;

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

当前位置:首页 > 求职职场 > 面试

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

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