计算计软件课设.docx
《计算计软件课设.docx》由会员分享,可在线阅读,更多相关《计算计软件课设.docx(12页珍藏版)》请在冰豆网上搜索。
计算计软件课设
计算机软件基础课程设计
题目:
任意两个顶点之间的最短路径
学院:
信息与通信工程学院
专业:
通信工程专业
题目
任意两个顶点之间的最短路径(难度系数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;jprintf("%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.