图形数据结构实验Word文档格式.docx
- 文档编号:16198522
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:19
- 大小:125.62KB
图形数据结构实验Word文档格式.docx
《图形数据结构实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《图形数据结构实验Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
#defineOtherInfoint
intvisited[MAX_VERTEX_NUM];
#defineTRUE1
#defineMAXSIZE6
typedefstruct
{
intelement[MAXSIZE];
intfront;
intrear;
}SeqQueue;
typedefenum{DG,DN,UDG,UDN}GraphKind;
typedefcharVertexData;
typedefstructArcNode
AdjTypeadj;
OtherInfoinfo;
}ArcNode;
VertexDatavexs[MAX_VERTEX_NUM];
ArcNodearcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
intvernum,arcnum;
GraphKindkind;
}AdjMatrix;
intLocateVertex(AdjMatrix*G,VertexDatav)
intj=Error;
intk;
for(k=0;
k<
G->
vernum;
k++)
if(G->
vexs[k]==v)
{
j=k;
break;
}
return(j);
}
intCreatUDG(AdjMatrix*G)
inti,j,k;
VertexDatav1,v2;
cout<
<
"
输入无向图的顶点数和边数:
endl;
cin>
>
arcnum;
for(i=0;
i<
i++)
for(j=0;
j<
j++)
G->
arcs[i][j].adj=0;
输入图的顶点:
{
cin>
vexs[i];
}
cout<
输入一条边的两顶点:
v1;
v2;
i=LocateVertex(G,v1);
j=LocateVertex(G,v2);
G->
arcs[i][j].adj=1;
arcs[j][i].adj=G->
arcs[i][j].adj;
return(OK);
voidPrint(AdjMatrix*G)
inti,j;
for(j=0;
arcs[i][j].adj<
"
;
voidDepthFirstSearch(AdjMatrix*G,intv0)
vexs[v0]<
visited[v0]=OK;
for(intvi=1;
vi<
vi++)
if(!
visited[vi]&
&
G->
arcs[v0][vi].adj==1)
DepthFirstSearch(G,vi);
voidInitQueue(SeqQueue*Q)
Q->
front=Q->
rear=0;
intEmpty(SeqQueue*Q)
if(Q->
rear=0)
return(TRUE);
else
return(Error);
intEnterQueue(SeqQueue*Q,intx)
if((Q->
rear+1)%MAXSIZE==Q->
front)
队已满。
return(FALSE);
element[Q->
rear]=x;
rear=(Q->
rear+1)%MAXSIZE;
return(TRUE);
intDeleteQueue(SeqQueue*Q,int*x)
rear)
队空"
return(FALSE);
*x=Q->
front];
front=(Q->
front+1)%MAXSIZE;
return(*x);
intFirstAdj(AdjMatrix*G,intv)
intj,p=-1;
=G->
arcs[v][j].adj==1)
p=j;
return(p);
intNextAdj(AdjMatrix*G,intv,intw)
for(j=w+1;
voidBreadthFirstSearch(AdjMatrix*G,intv0)
SeqQueue*Q;
Q=(SeqQueue*)malloc(sizeof(SeqQueue));
InitQueue(Q);
for(inti=0;
visited[i]=FALSE;
EnterQueue(Q,v0);
intv,w;
while(!
Empty(Q))
v=DeleteQueue(Q,&
v);
for(w=0;
w<
w++)
{
if((G->
arcs[v][w].adj!
=0)&
(visited[w]==0))
{
vexs[w]<
visited[w]=1;
EnterQueue(Q,w);
}
voidmain()
AdjMatrix*G;
G=(AdjMatrix*)malloc(sizeof(AdjMatrix));
CreatUDG(G);
Print(G);
打印邻接矩阵"
深度优先搜索:
DepthFirstSearch(G,0);
广度优先搜索:
BreadthFirstSearch(G,0);
邻接表
#include<
stdio.h>
stdlib.h>
#defineERROR-1
#definemaxvernum10
#definemaxsize(maxvernum+1)
#defineinfinity32768
typedefstruct
intelement[maxsize];
}Seqqueue;
intEnterqueue(Seqqueue*q,intx)
if((q->
rear+1)%maxsize!
=q->
front)
q->
element[q->
rear]=x;
rear=(q->
rear+1)%maxsize;
return(TRUE);
else
intDeletequeue(Seqqueue*q,int*x)
if(q->
front==q->
*x=q->
element[q->
q->
front=(q->
front+1)%maxsize;
return(TRUE);
intvisited[maxvernum];
typedefstructArcnode
intadjvex;
structArcnode*nextarc;
}Arcnode;
typedefstructvexnode
intdata;
Arcnode*firstarc;
}vexnode;
vexnodevexs[maxvernum];
intvexnum,arcnum;
}Adjlist;
intLocate(Adjlist*g,intv)
g->
vexnum;
if(g->
vexs[k].data==v)
returnk;
}
return-1;
voidCreate(Adjlist*g)
inti,j,k,v1,v2;
请输入顶点数和弧数:
vexnum>
g->
vexs[i].data=i+1;
vexs[i].firstarc=NULL;
打印顶点数据:
{
a"
vexs[i].data<
请输入第"
k+1<
对边:
v1>
i=Locate(g,v1);
j=Locate(g,v2);
if(i>
=0&
j>
=0)
Arcnode*p,*q;
p=(Arcnode*)malloc(sizeof(Arcnode));
p->
adjvex=j;
nextarc=NULL;
if(!
vexs[i].firstarc)
g->
vexs[i].firstarc=p;
else
q=g->
vexs[i].firstarc;
while(q->
nextarc)
{
q=q->
nextarc;
}
q->
nextarc=p;
}
打印邻接表:
vexs[i].firstarc)
Arcnode*p;
cout<
i+1<
a"
--->
p=g->
while(p->
cout<
(p->
adjvex)+1<
p=p->
nextarc;
elsecout<
intFirst(Adjlistg,intv)
if(g.vexs[v].firstarc)
returng.vexs[v].firstarc->
adjvex;
return-1;
intNext(Adjlistg,intv,intw)
intflag=0;
Arcnode*p;
p=g.vexs[v].firstarc;
while(p)
if(p->
adjvex==w)
flag=1;
p=p->
if(flag&
p->
returnp->
nextarc->
voidDFS(Adjlistg,intv0)
if(g.vexs[v0].firstarc)
Arcnode*p;
g.vexs[v0].data;
visited[v0]=TRUE;
p=g.vexs[v0].firstarc;
while(p!
=NULL)
visited[p->
adjvex])
DFS(g,(p->
adjvex));
p=p->
g.vexs[v0].data;
}
voidBFS(Adjlistg,intv0)
Seqqueue*q;
q=(Seqqueue*)malloc(sizeof(Seqqueue));
rear=q->
front=0;
intv;
intw;
for(;
v0<
g.vexnum;
v0++)
visited[v0])
visited[v0]=TRUE;
Enterqueue(q,v0);
while(q->
rear!
Deletequeue(q,&
w=First(g,v);
while(w!
=-1)
if(!
visited[w])
{
cout<
g.vexs[w].data;
visited[w]=TRUE;
Enterqueue(q,w);
}
w=Next(g,v,w);
{
Adjlistg;
Create(&
g);
g.vexnum;
深度优先遍历:
for(intv0=0;
DFS(g,v0);
广度优先遍历:
for(v0=0;
BFS(g,v0);
}
4测试数据与实验结果(可以抓图粘贴)
5结果分析与实验体会
做这次试验我感觉很吃力,邻接表,邻接矩阵都运用的不是很熟练,在书本上没有找到相应的算法,只能硬着头皮自己想办法,跟同学交流了很久才渐渐有了头绪,一开始做起来还是遇到了很多的困难。
之后在图书馆查阅了很多的资料,找了很多的实例才写出最终的算法,希望老师可以给我们一些算法实例,我们结合书本上的理论知识也许会有更好,更深刻的理解.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形 数据结构 实验