- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法
课程设计报告
课程设计题目: 图的算法实现
专业班级: 信息与计算科学1001班
姓 名: 学 号:
设计室号: 理学院机房
设计时间: 2011-12-
指导教师: 成 绩:
课题:图的算法实现
任务要求:
(1)将图的信息建立文件;
(2)从文件读入图的信息,建立邻接矩阵和邻接表;
(3)实现Prim、Kruskal、Dijkstra序算法
功能、算法、体会描述:
系统主要功能是实现图的算法,主界面选着建立保存图的信息,可以用普利姆,克鲁斯卡尔和狄克斯特拉三种算法分别实现。
1·建立图的邻接矩阵
基本思想:输入顶点和边数,输入顶点信息,算出邻接矩阵
程序模块:
typedef struct
{
char vexs[N];
int edges[N][N];
int n,e; //顶点数和边数
}MGraph;MGraph g;
typedef struct
{
char adjvex;
int lowcost;
}minside;
// 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。
int LocateVex(char u)
{
int i;
for(i = 0; i g.n; ++i)
if( u==g.vexs[i])
return i;
else
return -1;
}
// 求closedge.lowcost的最小正值
int minimum(minside SZ[])
{
int i=0,j,k,min;
while(SZ[i].lowcost==0)
i++;
min=SZ[i].lowcost; //第一个不为0的值
k=i;
for(j=i+1;jg.n;j++)
if(SZ[j].lowcost0)
if(minSZ[j].lowcost)
{
min=SZ[j].lowcost;
k=j;
}
return k;
}
用outmatrix()函数输出邻接矩阵,getin_1()函数保存文件和对文件进行载入。
程序模块:
void outmatrix()//邻接矩阵输出函数
{
int i,m,z;
printf(所建立表的邻接矩阵为:\n);
printf(\t);
for(i=0;ig.n;i++)
printf(%c\t,g.vexs[i]);
for(m=0;mg.n;m++)
{
printf(\n%c\t,g.vexs[m]);
for(z=0;zg.n;z++)
printf(%d\t,g.edges[m][z]);
}
}
void getin_1()// 文件保存函数
{
int a,b,k,w,z;FILE *fp;
if((fp=fopen(record_1.txt,w))==NULL) /*打开文件,并判断打开是否正常*/
{
printf(不能打开文件\n); /*没打开*/
exit(0);
}
printf(请输入顶点数:\n);
scanf(%d,g.n);
fprintf(fp,%d\n,g.n);
printf(请输入边数:\n);
scanf(%d,g.e);
fprintf(fp,%d\n,g.e);//初始化矩阵各元素值//读入边
printf(请输入顶点信息:\n);//顶点的信息会出现在矩阵边界上。
fflush(stdin);//清空缓冲
for (z=0;zg.n;z++)
{
scanf(%c,g.vexs[z]);
fprintf(fp,%c\n,g.vexs[z]);}
for(a=0;ag.n;a++)
for(b=0;bg.n;b++)
g.edges[a][b]=0;
printf(\n);
文档评论(0)