数据结构课程设计
来源:互联网 发布:java stackofinteger 编辑:程序博客网 时间:2024/05/22 14:57
《数据结构课程设计》
课程题目
最佳路径问题
课程编号
j1620102
学生姓名
杨小华
所在专业
信息管理和信息系统
所在班级
信管1134班
任课老师
易学明
实习时间
第十七周
设计成绩
老师评语
题目0.GDOU是真是一个好地方,校园如一座大花园,美丽而宽广。校园有许多建筑如0教学楼、1饭堂、2宿舍楼、3图书馆、4体育馆、5运动场、6商业街、7医院等,还有一些著名的风景点。现请根据学校的平面图,找出一些重要的场所,画出学校的平面图(场所可以根据其重要性适当减少),根据实际画出不同点间的路径,并估算每两个场所间的路径长。请设计数据结构并编程,当给出一个出发点和要到达另外一个场所的信息时,请给出最佳路径,并输出路径相关信息。
本程序采用Floyd算法,其基本思想是先定义两个点Vi到Vj之间的弧是最短路径,然后进行n次试探。首先比较Vi,Vj和Vi,V0的路径长度,取长度较短的作为中间顶点的编号不大于1的最短路径。一次类推,经过n次比较之后,最后求得Vi到Vj之间的最短路径。
题目0中一共有7个地点,它们之间的分布和距离如下图:
1:饭堂、2:医院 3:图书馆、4:宿舍楼、5:体育馆、6:商业街 7:运动场
运行的环境:VC6.0,这个软件是比较适合C++初学者来使用,有着较为健全的功能。
使用的算法:Floyd算法
#include <iostream>
#include <string>
#include<iomanip> //引入输入输出格式头文件
using namespace std;
const int Maxsize = 10;
class MGraph //定义一个类:地图
{
public:
MGraph(string a,int n,int e);
void Floyd();
void print();
private:
string vertex[Maxsize];
int arc[Maxsize][Maxsize];
int vertexNum,arcNum;
int dist[Maxsize][Maxsize];
string path[Maxsize][Maxsize];
};
MGraph:: MGraph(string a,int n,int e)
{ int i,j,k,info;
vertexNum = n;
arcNum = e;
for(i=0;i<vertexNum;i++)
vertex[i]=a[i];
for(i=0;i<vertexNum;i++) //初始化边,请将不到达边初始值为最大值,这里设置为10000
for(j=0;j<vertexNum;j++)
arc[i][j]=10000;
for(k=0;k<arcNum;k++) //输入图的边的顶点信息,将图顶点进行编号,从0开始
{ cout<<"请输入边依附的两个顶点的编号"<<endl;
cin>>i>>j;
while(i>=vertexNum && j>=vertexNum)
{ cout<<"请重新输入"<<endl;
cin>>i>>j;
}
cout<<"请输入边的权值"<<endl; //输入图的边的权值
cin>>info;
while(info < 0)
{ cout<<"请重新输入"<<endl;
cin>>info;
}
arc[i][j]=info;
}
}
void MGraph::Floyd() //定义了Floyd算法
{ int i,j,k;
for(i=0;i<vertexNum;i++) //初始化dist和path
for(j=0;j<vertexNum;j++)
{ dist[i][j] = arc[i][j];
if(dist[i][j] != 10000)
path[i][j]=vertex[i]+vertex[j];
else path[i][j] =" ";
}
for(k=0;k<vertexNum;k++) //判定顶点i j之间是否经过k
for(i=0;i<vertexNum;i++)
for(j=0;j<vertexNum;j++)
if(dist[i][k]+dist[k][j]<dist[i][j])
{ dist[i][j]=dist[i][k]+dist[k][j];
path[i][j]=path[i][k]+"-"+path[k][j];
}
}
void MGraph::print() //结点m到n的最短路径
{ int a,b,i;
cout<<"图的所有路径如下:"<<endl;
for(i=0;i<vertexNum;i++) //输出图的所有路径信息
{ for(int j=0;j<vertexNum;j++)
cout<<setw(10)<<setiosflags(ios::left)<<path[i][j]<<" "; //10个字符位置,且左对齐
cout<<endl;
}
cout<<"图的所有路径长如下:"<<endl;
for(i=0;i<vertexNum;i++) //输出图的各边长信息
{ for(int j=0;j<vertexNum;j++)
cout<<setw(3)<<setiosflags(ios::left)<<dist[i][j]<<" "; //3个字符位置,且左对齐
cout<<endl;
}
cout<<"您想了解哪两个点的最短路径?请输入这两个点"<<endl;
string ch1,ch2;
cin>>ch1>>ch2; //输入要判定是的顶点,请输入顶点字符。
for(i=0;i<vertexNum;i++)
if(vertex[i] == ch1) a=i;
for(i=0;i<vertexNum;i++)
if(vertex[i] == ch2) b=i;
cout<<ch1<<"到"<<ch2<<"的最短路径为:"<<path[a][b]<<"长度为"<<dist[a][b]<<endl;
system("pause");
}
int main()
{ int n,e;
string ch;
cout<<"请输入顶点数和边数,空格格开:"<<endl;
cin>>n>>e;
cout<<"请依次输入各个顶点字符串:"<<endl;
cin>>ch;
MGraph m(ch,n,e);
m.Floyd();
m.print();
return 0;
}
这个程序相对比较简单,采用了Floyd算法,可以比较简便的算出两个点之间的长度。通过这次课程设计,再次巩固了C++的基础知识,此外也让我对了最短路径的算法有了更加深刻的认识。
- 数据结构课程设计
- 数据结构课程设计
- 课程设计----数据结构
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 《数据结构》课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构课程设计
- 数据结构 课程设计
- 打印结构体
- Guava学习笔记(一)
- 数据结构 课程设计报告
- WCF开发实战:编写WCF程序并使用IIS发布
- 不要闷声发大财,要懂内存分析……
- 数据结构课程设计
- macbook环境下从iphone微信中导出语音文件
- 架构、引擎与UI通用语言解释
- VS2013 MFC Windows 程序设计之窗口滚动条 他对,坚持,坚持,就对了。
- 【C++ Primer】【学习笔记】【第八章】标准IO库之:面向对象的标准库
- Win8(NT.6X)修改MTU值过小后蓝屏处理记录
- ios项目结构
- javascript 对象的可扩展性详解
- iOS8 scrollView滚动视图