费富增E01214108图的邻接矩阵存储结构建立.docx

上传人:b****7 文档编号:16323374 上传时间:2023-07-12 格式:DOCX 页数:13 大小:117.61KB
下载 相关 举报
费富增E01214108图的邻接矩阵存储结构建立.docx_第1页
第1页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第2页
第2页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第3页
第3页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第4页
第4页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第5页
第5页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第6页
第6页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第7页
第7页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第8页
第8页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第9页
第9页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第10页
第10页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第11页
第11页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第12页
第12页 / 共13页
费富增E01214108图的邻接矩阵存储结构建立.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

费富增E01214108图的邻接矩阵存储结构建立.docx

《费富增E01214108图的邻接矩阵存储结构建立.docx》由会员分享,可在线阅读,更多相关《费富增E01214108图的邻接矩阵存储结构建立.docx(13页珍藏版)》请在冰点文库上搜索。

费富增E01214108图的邻接矩阵存储结构建立.docx

费富增E01214108图的邻接矩阵存储结构建立

 

课程名称:

《数据结构》课程设计

课程设计题目:

7.1图的邻接矩阵存储结构建立

姓名:

费富增

院系:

计算机学院

专业:

计算机科学与技术

年级:

2012

学号:

E01214108

指导教师:

王爱平

2014年10月10日

 

目录

1课程的目的………………………………………………………………

2需求分析………………………………………………………………………

3课程设计报告内容……………………………………………………………

3.1概要设计……………………………………………………………………

3.2详细设计……………………………………………………………………

3.3调试分析……………………………………………………………………

3.4用户手册……………………………………………………………………

3.5测试结果……………………………………………………………………

3.6程序清单……………………………………………………………………

4小结…………………………………………………………………………

5参考文献………………………………………………………………

 

1.课程设计的目的

(1)熟练使用C语言编写程序,解决实际问题;

(2)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

(3)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

2.需求分析

建立图的邻接矩阵存储结构(以无向图为例),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后给出图的DFS,BFS次序。

3图的邻接矩阵存储结构建立的设计

3.1概要设计

1.函数

1.函数

①主函数:

main()

②创建无向图:

CreateGraph()

③深度优先遍历图:

DFS()

④广度优先遍历图:

BFS()

3.2详细设计

1.用邻接矩阵作为图的存储结构,程序中主要用到的抽象数据类型:

typedefstruct

{

charvexs[MAX];//顶点向量

intarcs[MAX][MAX];//邻接矩阵

intvexnum,arcnum;//图的当前顶点数和弧数

}Graph;

2.程序流程图:

 

 

源程序:

#include

#include

#defineMAX20

intvisited[MAX];

typedefstruct

{

charvexs[MAX];

intarcs[MAX][MAX];//邻接矩阵

intvexnum,arcnum;//图的当前顶点数和边数

}Graph;

typedefstructQnode

{

intdata;

structQnode*next;

}Qnode,*Queueptr;

typedefstruct

{

Queueptrfront;

Queueptrrear;

}Linkqueue;

voidInitQueue(Linkqueue&Q)

{

Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode));

if(Q.front)

Q.front->next=NULL;

}

voidEnQueue(Linkqueue&Q,inte)

{

Queueptrp;

p=(Queueptr)malloc(sizeof(Qnode));

if(p)

{

p->data=e;

p->next=NULL;

Q.rear->next=p;

Q.rear=p;

}

}

intDeQueue(Linkqueue&Q)

{

inte;

Queueptrp;

if(Q.rear!

=Q.front)

{

p=Q.front->next;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p)

Q.rear=Q.front;

free(p);

}

if(Q.front==p)

Q.rear=Q.front;

returne;

}

intLocatevex(GraphG,charv)//返回元素v的位置

{

inti;

for(i=0;i

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

returni;

return-1;

}

voidCreateGraph(Graph&G)//创建无向图的邻接矩阵

{

inti,j,w,m,n;

chara,b,c;

printf("请输入图G的顶点数和弧数:

");

scanf("%d%d",&G.vexnum,&G.arcnum);

getchar();

for(i=0;i

visited[i]=0;

for(i=0;i

{printf("请输入第%d个顶点信息:

",i+1);

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

getchar();

}

for(i=0;i

for(j=0;j

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

for(i=0;i

{printf("请输入第%d条弧依附的两个顶点及权值:

",i+1);

scanf("%c%c%d%c",&a,&b,&w,&c);

m=Locatevex(G,a);

n=Locatevex(G,b);

G.arcs[m][n]=w;

G.arcs[n][m]=w;

}

}

voidPrintMatrix(GraphG)//输出邻接矩阵

{

inti,j;

printf("\n由图G生成的邻接矩阵如下:

\n");

for(i=0;i

{

for(j=0;j

printf("%-2d",G.arcs[i][j]);

printf("\n");

}}

intFirstAdiVex(GraphG,intv)//图G中顶点v的第一个邻接顶点

{

inti;

if(v>=0&&v

{

for(i=0;i

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

=0)

returni;

}

return-1;

}

intNextAdVex(GraphG,inti,intj)//图G中顶点i的第j个邻接顶点的下一个邻接顶点

{

intk;

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

{

for(k=j+1;k

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

=0)

returnk;

}

return-1;

}

voidDFS(GraphG,intv)

{

intu;

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

visited[v]=1;

u=FirstAdiVex(G,v);

while(u>=0)

{if(!

visited[u])

DFS(G,u);

u=NextAdVex(G,v,u);

}}

voidBFS(GraphG)\

{

inti,w,k;

LinkqueueQ;

InitQueue(Q);

for(i=0;i

visited[i]=0;

for(i=0;i

if(!

visited[i])

{

visited[i]=1;

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

EnQueue(Q,i);

while(Q.front!

=Q.rear)

{

k=DeQueue(Q);

for(w=FirstAdiVex(G,k);w>=0;w=NextAdVex(G,k,w))

if(!

visited[w])

{visited[w]=1;

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

EnQueue(Q,w);

}}}}

intmain()

{intm;

GraphG;

while

(1)

{printf("----图的邻接矩阵存储结构建立----\n");

printf("1.创建无向图\n");

printf("2.图的深度优先遍历\n");

printf("3.图的广度优先遍历\n");

printf("请选择:

");

scanf("%d",&m);

if(m==1)

{

CreateGraph(G);

PrintMatrix(G);

}

elseif(m==2)

{

printf("图G的深度递归优先遍历序列为:

\n");

DFS(G,0);

printf("\n");

}

elseif(m==3)

{

printf("图G的广度非递归优先遍历序列为:

\n");

BFS(G);

printf("\n");

}

else

printf("重新输入!

\n");

}

return0;

}3.3调试分析

编写这个程序完全可以变成三个小程序,分别为1.创建无向图2.图的深度优先遍历3.图的广度优先遍历。

程序的设计严格遵循结构化的程序设计思想,由简单到复杂,注意规范。

3.4用户手册(略)

3.5测试结果(略)

4总结

在对类似的几类不同的矩阵结构进行操作时,可以相互比较,在对比中编写可以减少不少时间,因为其相互都是相通的。

在编写程序是还要特别注意细节,最后调试发现有不少细节错误导致程序不通过,所以在调试时要注意细节,细节决定成败。

通过设计调试集合运算器的设计这个实验,懂得设计一个程序要首先有一个清晰的思路,构建清晰的思路后再完善各个小部分。

5、程序清单:

(见附录)

6、参考文献

1严蔚敏,吴伟民编著.数据结构(C语言版)--北京:

清华大学出版社,2007.2严蔚敏,吴伟民米宁编著.数据结构题集(C语言版)--北京:

清华大学出版社,2007.3网上搜索相关程序作为参考

7、程序运行结果

运行截图

 

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

当前位置:首页 > 解决方案 > 学习计划

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

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