1、计算计软件课设计算机软件基础课程设计题 目: 任意两个顶点之间的最短路径 学 院: 信息与通信工程学院 专 业: 通信工程专业 题目任意两个顶点之间的最短路径(难度系数9)主要内容1、 假设西安、北京、沈阳、武汉4个城市构成小型交通网,4个城市表示图的4个顶点,他们构成了无向连通图。求任意两个城市之间的最短路径。2、 学会建立图的邻接表,理解图的基本概念。3、 学会编写DLL函数。4、 根据自己构建的连通图,利用Floyd算法求任意两个顶点之间的最短路径。5、 掌握C+编程环境的基本调试方法,熟练使用可视化C+编程工具。设计要求1、上交课程设计的书面材料,要求打印。包括课程设计任务书、主要内容
2、,源程序,对程序的功能进行客观评价,明确指出自己编写了哪些具体函数。2、上交电子版源程序,包括邻接表建立程序、Floyd算法。3、自己编写一个求素数函数,把它书写成一个动态链接库形式,并在主函数中调用它。尝试把自己编写的程序写成动态链接库和静态链接库形式(无需上交),并比较以下三种EXE文件的大小。A:调用静态链接库生成的EXE执行文件。B:调用动态链接库生成的EXE执行文件。C:直接调用函数生成的EXE执行文件。主要仪器设备计算机一台,安装Windows XP 操作系统、Microsoft Visual C+ 6.0、MSDN Library。主要参考文献1 侯俊杰. 深入浅出MFC(第二版
3、)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、的最短路径。4 学时 调试程序,答辩。课程设计开始日期第2周周一课程设计完成日期第2周周五课程设计实验室名称计算中心机房地 点健翔桥校区目录一、题目及要求 1二、邻接矩阵 2三、程序代码及实验结果 4六、设计总结22七、参考文献23一、 题目及要求课设题目:1、假设西安、北京、沈阳、武汉4个城市构成小型交通网,4个城市表示图的4个顶点,他们构成了无向连通图。求任意两个城市之间的最短路径。2、学会建立图的邻接表,理解图的基本概念。3、学会编写DLL函数。4、根据自己构建的连通图,利用Floyd算法求任意两个顶点之间的最短路径。5、掌握C+编程环境的基本调试方法,熟练使用可视化C+编程工具。课设要
5、求:1、上交课程设计的书面材料,要求打印。包括课程设计任务书、主要内容,源程序,对程序的功能进行客观评价,明确指出自己编写了哪些具体函数。2、上交电子版源程序,包括邻接表建立程序、Floyd算法。3、自己编写一个求素数函数,把它书写成一个动态链接库形式,并在主函数中调用它。尝试把自己编写的程序写成动态链接库和静态链接库形式(无需上交),并比较以下三种EXE文件的大小。A:调用静态链接库生成的EXE执行文件。B:调用动态链接库生成的EXE执行文件。C:直接调用函数生成的EXE执行文件。二、图的邻接矩阵表示法1.图的邻接矩阵表示法 在图的邻接矩阵表示法中: 用邻接矩阵表示顶点间的相邻关系 用一个顺
6、序表来存储顶点信息typedef struct char cma; /顶点信息 int data; /顶点序号vbe;typedef struct int n; /顶点个数 int e; /边个数 vbe vdma; /存储顶点 int vbmama; /存储边的权值mgraph;三、程序代码及实验结果#include stdio.h#include malloc.h#include stdlib.h#include string.h#define ma 4typedef struct char cma; /顶点信息 int data; /顶点序号vbe;typedef struct int
7、n; /顶点个数 int e; /边个数 vbe vdma; /存储顶点 int vbmama; /存储边的权值mgraph;mgraph mg,*g=&mg;mgraph *creat() int i,j,n,e,w; printf( * 输入顶点数及边数 *n); scanf(%d%d,&n,&e); g-n=n; g-e=e; printf( *按顺序输入顶点信息(比如武汉)*n); for(i=0;ivdi.c); g-vdi.data=i; printf(n%dn,g-vdi.data); printf(n%sn,g-vdi.c); printf( *请输入边的信息及权值 *n);
8、for(i=0;i3;i+) for(j=i+1;jvdi.c,g-vdj.c); scanf(%d,&w); printf(n); g-vbji=g-vbij=w; printf(n 得到的邻接矩阵如下:n); for(i=0;in;i+) for(j=0;jvbij); printf(n); printf( 创建完成n); return(g);void ppath(int pathmama,int i, int j) /向前递归查找路径 int k,h; static int m=0; int a20; k=pathij; if(k=-1) return; else am=k; m+; p
9、path(path,i,k); printf(%s-,g-vdi.cma); for(;m=0;m-) h=am; printf(%s-,g-vdh.cma); printf(%s,g-vdj.cma);void dispath(int Amama,int pathmama,int n) /输出最短路径 int i,j; char a; printf(n请输入所查两城市的代码); scanf(%d%d,&i,&j); if(i!=j) printf(n从%s到%s的最短路径为:,g-vdi.cma,g-vdj.cma); ppath(path,i,j); printf(n路径长度为:%dn,A
10、ij); printf(n继续查找请按y停止请按n); scanf(%c,&a); if(a=y|a=Y) dispath(A,path,n); else exit(0);void floyd(mgraph *m) /floyd算法 int Amama,pathmama; int i,j,k; for(i=0;in;i+) for(j=0;jn;j+) Aij=m-vbij; pathij=-1; for(k=0;kn;k+) for(i=0;in;i+) for(j=0;jn;j+) if(Aik!=0&Akj!=0&Aij(Aik+Akj) Aij=Aik+Akj; pathij=k; i
11、=m-n; dispath(A,path,i);int main() int a; for(;) int a; 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(); else if(a=2) floyd(g); else exit(0); continue; return 0;实验结果输入1选2 五、设计心得这次课设也让我进一步的学习了C+的运用,之前的学习基本都是以写小程序为主,通过这次机会,进一步的练习了C+的运用。并且了解了关于数组作为函数参数互相传递之间的问题六、参考文献1 侯俊杰. 深入浅出MFC(第二版)M. 武汉:华中科技大学出版社, 2001.2 谭浩强. C程序设计(第二版)M. 北京:清华大学出版社, 1999.3 孟彩霞. 计算机软件基础M. 陕西:西安电子科技大学出版社, 2003.4 严蔚敏, 吴伟民. 数据结构M. 北京:清华大学出版社, 2005.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1