图形数据结构实验Word文档格式.docx

上传人:b****5 文档编号:16198522 上传时间:2022-11-21 格式:DOCX 页数:19 大小:125.62KB
下载 相关 举报
图形数据结构实验Word文档格式.docx_第1页
第1页 / 共19页
图形数据结构实验Word文档格式.docx_第2页
第2页 / 共19页
图形数据结构实验Word文档格式.docx_第3页
第3页 / 共19页
图形数据结构实验Word文档格式.docx_第4页
第4页 / 共19页
图形数据结构实验Word文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

图形数据结构实验Word文档格式.docx

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

图形数据结构实验Word文档格式.docx

#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结果分析与实验体会

做这次试验我感觉很吃力,邻接表,邻接矩阵都运用的不是很熟练,在书本上没有找到相应的算法,只能硬着头皮自己想办法,跟同学交流了很久才渐渐有了头绪,一开始做起来还是遇到了很多的困难。

之后在图书馆查阅了很多的资料,找了很多的实例才写出最终的算法,希望老师可以给我们一些算法实例,我们结合书本上的理论知识也许会有更好,更深刻的理解.

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

当前位置:首页 > 小学教育 > 英语

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

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