图结构的操作.docx

上传人:b****1 文档编号:1444229 上传时间:2023-05-01 格式:DOCX 页数:8 大小:28.39KB
下载 相关 举报
图结构的操作.docx_第1页
第1页 / 共8页
图结构的操作.docx_第2页
第2页 / 共8页
图结构的操作.docx_第3页
第3页 / 共8页
图结构的操作.docx_第4页
第4页 / 共8页
图结构的操作.docx_第5页
第5页 / 共8页
图结构的操作.docx_第6页
第6页 / 共8页
图结构的操作.docx_第7页
第7页 / 共8页
图结构的操作.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

图结构的操作.docx

《图结构的操作.docx》由会员分享,可在线阅读,更多相关《图结构的操作.docx(8页珍藏版)》请在冰点文库上搜索。

图结构的操作.docx

图结构的操作

《数据结构与算法分析》

课程实验报告

 

项目名称:

图结构的操作

学生姓名:

学生学号:

指导教师:

完成日期:

 

【实验目的】

1.理解图形结构的逻辑和存储特点。

2.掌握图形结构遍历递归算法。

【实验内容】

1.用邻接矩阵或者邻接表存储一个图形结构。

2.采用深度或者广度优先搜索算法,遍历一个图,并输出遍历结果。

【实验方式】

个人实验。

【实验设备与环境】

PC机,WindowsXP操作系统,VC++6.0开发环境。

【数据结构及函数定义】

(1)类的定义:

类的数据成员,成员函数

  ...................

(2)主函数main()实现初始化操作,完成对子函数的调用

...................

(3)子函数

   ...................

【测试数据与实验结果】

(请用截图的方式展示实验结果,并辅以必要的文字说明)

 

【源程序清单】

(请附上源程序)

#include

//#include

#defineINFINITY32767

#defineMAX_VEX20//最大顶点个数

#defineQUEUE_SIZE(MAX_VEX+1)//队列长度

usingnamespacestd;

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;

}//出队

public:

int*base;

intfront;

intrear;

};

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

intLocate(GraphG,charc){

for(inti=0;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));//分配顶点数目

printf("输入%d个顶点.\n",G.vexnum);

for(i=0;i

printf("输入顶点%d:

",i);

scanf("%c",&G.vexs[i]);

temp=getchar();//接收回车

}

for(i=0;i

for(j=0;j

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

printf("输入%d条弧.\n",G.arcnum);

for(i=0;i

printf("输入弧%d:

",i);

scanf("%c%c%d",&a,&b,&w);//输入一条边依附的顶点和权值

temp=getchar();//接收回车

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

for(inti=0;i

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

=INFINITY)returni;

}

return-1;

}

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

intNextVex(GraphG,inti,intj){

if(i>=0&&i=0&&j

for(intk=j+1;k

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

=INFINITY)returnk;

}

return-1;

}

//深度优先遍历

voidDFS(GraphG,intk){

inti;

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

for(i=0;i

if(!

visited[i])DFS(G,i);//对尚未访问的顶点调用DFS

}

else{

visited[k]=true;

printf("%c",G.vexs[k]);//访问第k个顶点

for(i=FirstVex(G,k);i>=0;i=NextVex(G,k,i))

if(!

visited[i])DFS(G,i);//对k的尚未访问的邻接顶点i递归调用DFS

}

}

//广度优先遍历

voidBFS(GraphG){

intk;

QueueQ;//辅助队列Q

Q.InitQueue();

for(inti=0;i

if(!

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

visited[i]=true;

printf("%c",G.vexs[i]);

Q.EnQueue(i);//i入列

while(Q.front!

=Q.rear){

Q.DeQueue(k);//队头元素出列并置为k

for(intw=FirstVex(G,k);w>=0;w=NextVex(G,k,w))

if(!

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

visited[w]=true;

printf("%c",G.vexs[w]);

Q.EnQueue(w);

}

}

}

}

//主函数

voidmain(){

inti;

GraphG;

CreateUDN(G);

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

printf("\n广度优先遍历:

");

for(i=0;i

visited[i]=false;

DFS(G,-1);

printf("\n深度优先遍历:

");

for(i=0;i

visited[i]=false;

BFS(G);

printf("\n程序结束.\n");

}

上课纪律(20%)

实验过程及结果(40%)

实验报告质量(40%)

总分:

教师签字:

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2