云南大学软件学院数据结构实验报告六
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
云南大学软件学院数据结构实验报告
(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)
实验难度:A□ B □ C ■
序号学号姓名成绩
1
2
指导教师:(签名)
学期:2012秋季学期
任课教师:
实验题目: 图及其应用
小组长:
联系电话:
电子邮件:
完成提交时间:2012年12月 20日云南大学软件学院2012学年秋季学期
《数据结构实验》成绩考核表
学号:姓名:本人承担角色:小组长
综合得分:(满分100分)
指导教师:年月日学号:姓名:本人承担角色:组员
综合得分:(满分100分)
指导教师:年月日
(注:此表在难度为C时使用,每个成员一份。)
一、【实验构思(Conceive)】(10%)
(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)
本实验要求设计一个校园导游系统,要求通过图这一数据结构计算两点之间的最短距离,实现校园导航功能。首先要收集校园景点信息和景点之间的距离信息,然后利用图存储校园景点信息和景点之间的距离信息,最后使用Dijkstra算法计算最短路径。
离散数学相关知识:正确合理使用与或非之间的关系,进行程序分支判断,保证程序正常进行,以及图的使用。
二、【实验设计(Design)】(20%)
本次实验使用C进行编写,自定义函数2个:
void init_graph(graph *g)//图的初始化函数
void shortest_path(graph *g,int s, int t,int n)//求最短路径的算法主函数为功能选择界面
三、【实现描述(Implement)】(30%)
主函数显示开始界面,选择相应的功能求最短路径。
人性化设计:
1.在输入出现错误时例如功能选择错误时,程序会给出友好的提示;
2. 界面友好,容易上手。
四、【代码】(10%)
#include
#include
#include
#include
#define INFINITY 9999 //最大距离
#define MAX_NODES 30 //最大结点数
int dist[MAX_NODES][MAX_NODES]; //dist[i][j]表示i、j连线的权重int path[MAX_NODES];
using namespace std;
typedef struct VertexType{
char* sight; //景点名称
//char* info; //景点描述
}VertexType; //定义顶点的类型
typedef struct
{
int vexnum;
VertexType vex[MAX_NODES];
}graph;
void init_graph(graph *g)
{
int a,x,y=0;
g->vexnum = 27;
g->vex[0].sight="云大西二门";
g->vex[1].sight="百家道";
g->vex[2].sight="文典广场";
g->vex[3].sight="云大会堂";
g->vex[4].sight="中山邦翰楼";
g->vex[5].sight="仰止楼";
g->vex[6].sight="桦苑";
g->vex[7].sight="楠苑";
g->vex[8].sight="格物楼";
g->vex[9].sight="楠苑体育场";
g->vex[10].sight="知味堂";
g->vex[11].sight="楠苑超市";
g->vex[12].sight="综合服务楼";
g->vex[13].sight="楸苑";
g->vex[14].sight="力行楼";
g->vex[15].sight="软件楼";
g->vex[16].sight="校医院";
g->vex[17].sight="明远楼";
g->vex[18].sight="至公大道";
g->vex[19].sight="行政办公楼";
g->vex[20].sight="云大北门";
g->vex[21].sight="文汇楼";
g->vex[22].sight="余味堂";
g->vex[23].sight="梓苑超市";
g->vex[24].sight="梓苑";
g->vex[25].sight="钟楼";
g->vex[26].sight="校车乘车点";
for(x=0;x
for(y=0;y
dist[x][y]=INFINITY;
//下边是可直接到达的景点间的距离,由于两个景点间距离是互相的,所以要对图中对称的边同时赋值 dist[0][1]=dist[1][0]=10;
dist[1][2]=dist[2][1]=20;
dist[2][3]=dist[3][2]=20;
dist[1][4]=dist[4][1]=50;
dist[4][5]=dist[5][4]=200;
dist[4][6]=dist[6][4]=130;
dist[5][7]=dist[7][5]=600;
dist[5][8]=dist[8][5]=800;
dist[5][9]=dist[9][5]=600;
dist[7][8]=dist[8][7]=100;
dist[7][9]=dist[9][7]=600;
dist[7][10]=dist[10][7]=150;
dist[7][11]=dist[11][7]=110;
dist[7][12]=dist[12][7]=100;
dist[8][12]=dist[12][8]=80;
dist[9][11]=dist[11][9]=700;
dist[10][11]=dist[11][10]=5;
dist[10][12]=dist[12][10]=50;
dist[10][13]=dist[13][10]=150;
dist[12][13]=dist[13][12]=100;
dist[12][26]=dist[26][12]=20;
dist[13][14]=dist[14][13]=200;
dist[13][15]=dist[15][13]=250;
dist[13][16]=dist[16][13]=700;
dist[13][26]=dist[26][13]=100;
dist[14][15]=dist[15][14]=20;
dist[14][16]=dist[16][14]=500;
dist[14][17]=dist[17][14]=1500;
dist[16][17]=dist[17][16]=1300;
dist[17][18]=dist[18][17]=50;
dist[17][25]=dist[25][17]=300;
dist[18][19]=dist[19][18]=30;
dist[19][20]=dist[20][19]=100;
dist[20][21]=dist[21][20]=950;
dist[20][22]=dist[22][20]=900;