云南大学软件学院数据结构实验报告六

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;xvexnum;x++)

for(y=0;yvexnum;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;

相关文档
最新文档