计算计软件课设.docx

上传人:b****8 文档编号:10868493 上传时间:2023-02-23 格式:DOCX 页数:12 大小:85.63KB
下载 相关 举报
计算计软件课设.docx_第1页
第1页 / 共12页
计算计软件课设.docx_第2页
第2页 / 共12页
计算计软件课设.docx_第3页
第3页 / 共12页
计算计软件课设.docx_第4页
第4页 / 共12页
计算计软件课设.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

计算计软件课设.docx

《计算计软件课设.docx》由会员分享,可在线阅读,更多相关《计算计软件课设.docx(12页珍藏版)》请在冰豆网上搜索。

计算计软件课设.docx

计算计软件课设

计算机软件基础课程设计

 

题目:

任意两个顶点之间的最短路径

 

学院:

信息与通信工程学院

专业:

通信工程专业

 

题目

任意两个顶点之间的最短路径(难度系数9)

主要

内容

1、假设西安、北京、沈阳、武汉4个城市构成小型交通网,4个城市表示图的4个顶点,他们构成了无向连通图。

求任意两个城市之间的最短路径。

2、学会建立图的邻接表,理解图的基本概念。

3、学会编写DLL函数。

4、根据自己构建的连通图,利用Floyd算法求任意两个顶点之间的最短路径。

5、掌握C++编程环境的基本调试方法,熟练使用可视化C++编程工具。

设计

要求

1、上交课程设计的书面材料,要求打印。

包括课程设计任务书、主要内容,源程序,对程序的功能进行客观评价,明确指出自己编写了哪些具体函数。

2、上交电子版源程序,包括邻接表建立程序、Floyd算法。

3、自己编写一个求素数函数,把它书写成一个动态链接库形式,并在主函数中调用它。

尝试把自己编写的程序写成动态链接库和静态链接库形式(无需上交),并比较以下三种EXE文件的大小。

A:

调用静态链接库生成的EXE执行文件。

B:

调用动态链接库生成的EXE执行文件。

C:

直接调用函数生成的EXE执行文件。

主要

仪器

设备

计算机一台,安装WindowsXP操作系统、MicrosoftVisualC++6.0、MSDNLibrary。

主要

参考

文献

[1]侯俊杰.深入浅出MFC(第二版)[M].武汉:

华中科技大学出版社,2001.

[2]谭浩强.C程序设计(第二版)[M].北京:

清华大学出版社,1999..

[3]孟彩霞.计算机软件基础[M].陕西:

西安电子科技大学出版社,2003.

[4]严蔚敏,吴伟民.数据结构[M].北京:

清华大学出版社,2005.

课程设计进度计划(起止时间、工作内容)

选做最短路径题目的同学,2人1组,1人做Dijkstra算法,1人做Floyd算法,整个课程设计共20学时,具体进度如下:

4学时了解课题背景,选题,学习DLL,学习图的基本概念。

4学时编写邻接表建立程序。

4学时Floyd算法。

4学时尝试利用Floyd算法求从某个源点到其余各顶点的最短路径。

4学时调试程序,答辩。

课程设计开始日期

第2周周一

课程设计完成日期

第2周周五

课程设计实验室名称

计算中心机房

地点

健翔桥校区

目录

 

一、题目及要求……………………………………………1

 

二、邻接矩阵………………………………………………2

 

三、程序代码及实验结果…………………………………4

 

六、设计总结………………………………………………22

 

七、参考文献………………………………………………23

一、题目及要求

课设题目:

1、假设西安、北京、沈阳、武汉4个城市构成小型交通网,4个城市表示图的4个顶点,他们构成了无向连通图。

求任意两个城市之间的最短路径。

2、学会建立图的邻接表,理解图的基本概念。

3、学会编写DLL函数。

4、根据自己构建的连通图,利用Floyd算法求任意两个顶点之间的最短路径。

5、掌握C++编程环境的基本调试方法,熟练使用可视化C++编程工具。

课设要求:

1、上交课程设计的书面材料,要求打印。

包括课程设计任务书、主要内容,源程序,对程序的功能进行客观评价,明确指出自己编写了哪些具体函数。

2、上交电子版源程序,包括邻接表建立程序、Floyd算法。

3、自己编写一个求素数函数,把它书写成一个动态链接库形式,并在主函数中调用它。

尝试把自己编写的程序写成动态链接库和静态链接库形式(无需上交),并比较以下三种EXE文件的大小。

A:

调用静态链接库生成的EXE执行文件。

B:

调用动态链接库生成的EXE执行文件。

C:

直接调用函数生成的EXE执行文件。

二、图的邻接矩阵表示法

1.图的邻接矩阵表示法

 在图的邻接矩阵表示法中:

  ①用邻接矩阵表示顶点间的相邻关系

②用一个顺序表来存储顶点信息

typedefstruct

{

charc[ma];//顶点信息

intdata;//顶点序号

}vbe;

typedefstruct

{

intn;//顶点个数

inte;//边个数

vbevd[ma];//存储顶点

intvb[ma][ma];//存储边的权值

}mgraph;

三、程序代码及实验结果

#include"stdio.h"

#include"malloc.h"

#include"stdlib.h"

#include"string.h"

#definema4

typedefstruct

{

charc[ma];//顶点信息

intdata;//顶点序号

}vbe;

typedefstruct

{

intn;//顶点个数

inte;//边个数

vbevd[ma];//存储顶点

intvb[ma][ma];//存储边的权值

}mgraph;

mgraphmg,*g=&mg;

mgraph*creat()

{

inti,j,n,e,w;

printf("********输入顶点数及边数********\n");

scanf("%d%d",&n,&e);

g->n=n;

g->e=e;

printf("********按顺序输入顶点信息(比如武汉)********\n");

for(i=0;i

{

scanf("%s",g->vd[i].c);

g->vd[i].data=i;

printf("\n%d\n",g->vd[i].data);

printf("\n%s\n",g->vd[i].c);

}

printf("********请输入边的信息及权值********\n");

for(i=0;i<3;i++)

for(j=i+1;j<=3;j++)

{

printf("%s到%s的距离为:

",g->vd[i].c,g->vd[j].c);

scanf("%d",&w);

printf("\n");

g->vb[j][i]=g->vb[i][j]=w;

}

printf("\n得到的邻接矩阵如下:

\n");

for(i=0;i

{

for(j=0;j

printf("%d\t",g->vb[i][j]);

printf("\n");

}

printf("创建完成\n");

return(g);

}

voidppath(intpath[ma][ma],inti,intj)//向前递归查找路径

{

intk,h;

staticintm=0;

inta[20];

k=path[i][j];

if(k==-1)

return;

else

{

a[m]=k;

m++;

ppath(path,i,k);

}

printf("%s->",g->vd[i].c[ma]);

for(;m>=0;m--)

{

h=a[m];

printf("%s->",g->vd[h].c[ma]);

}

printf("%s",g->vd[j].c[ma]);

}

voiddispath(intA[ma][ma],intpath[ma][ma],intn)//输出最短路径

{

inti,j;

chara;

printf("\n请输入所查两城市的代码");

scanf("%d%d",&i,&j);

if(i!

=j)

{

printf("\n从%s到%s的最短路径为:

",g->vd[i].c[ma],g->vd[j].c[ma]);

ppath(path,i,j);

printf("\n路径长度为:

%d\n",A[i][j]);

}

printf("\n继续查找请按y停止请按n");

scanf("%c",&a);

if(a=='y'||a=='Y')

dispath(A,path,n);

else

exit(0);

}

voidfloyd(mgraph*m)//floyd算法

{

intA[ma][ma],path[ma][ma];

inti,j,k;

for(i=0;in;i++)

for(j=0;jn;j++)

{

A[i][j]=m->vb[i][j];

path[i][j]=-1;

}

for(k=0;kn;k++)

for(i=0;in;i++)

for(j=0;jn;j++)

{

if(A[i][k]!

=0&&A[k][j]!

=0&&A[i][j]>(A[i][k]+A[k][j]))

{

A[i][j]=A[i][k]+A[k][j];

path[i][j]=k;

}

}

i=m->n;

dispath(A,path,i);

}

intmain()

{

inta;

for(;;)

{

inta;

printf("*-----------------------------------------------------------*\n");

printf("**\n");

printf("*1......输入各城市间的距离*\n");

printf("**\n");

printf("*2......查找两城市最短路径*\n");

printf("**\n");

printf("*3......退出*\n");

printf("**\n");

printf("*-----------------------------------------------------------*\n");

scanf("%d",&a);

if(a==1)

*creat();

elseif(a==2)

floyd(g);

else

exit(0);

continue;

}

return0;

}

实验结果

输入1

选2

五、设计心得

这次课设也让我进一步的学习了C++的运用,之前的学习基本都是以写小程序为主,通过这次机会,进一步的练习了C++的运用。

并且了解了关于数组作为函数参数互相传递之间的问题

六、参考文献

[1]侯俊杰.深入浅出MFC(第二版)[M].武汉:

华中科技大学出版社,2001.

[2]谭浩强.C程序设计(第二版)[M].北京:

清华大学出版社,1999..

[3]孟彩霞.计算机软件基础[M].陕西:

西安电子科技大学出版社,2003.

[4]严蔚敏,吴伟民.数据结构[M].北京:

清华大学出版社,2005.

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

当前位置:首页 > 初中教育 > 政史地

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

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