数据结构-校园导游程序(附源码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实习报告

实验名称:校园导游程序日期:2017年7月7日

姓名:李琛学号:20153204 班级:信1501-2 指导教师:陈娜

1.实验题目

校园导游程序

[问题描述] 用无向网表示学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。

2.需求分析

游客通过终端可询问:

(1)从某一景点到另一景点的最短路径。

(2)游客从公园进入,选取一条最佳路线。

(3)使游客可以不重复地浏览各景点,最后回到出口(出口就在入口旁边)。

[基本要求]

(1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离.为此图选择适当的数据结构。

(2)把各种路径都显示给游客,由游客自己选择浏览路线。

(3)画出景点分布图于屏幕上。

3.概要设计

数据类型定义

#include

#include

//图的邻接矩阵存储表示

#define MaxInt 32767 //极大值

#define MVNum 100 //最大顶点数

//顶点类型为字符型

typedef int ArcType; //边的权值为整型using namespace std;

int i, j;

int S[100], D[100], min, Path[100];

int N = 49;

int bestcost = MaxInt; //记录目前最少运费或代价int currentcost; //当前运费或代价

int current[MaxInt]; //当前路径

int best[MaxInt]; //记录最佳路径

struct AMGraphd

{

string vexs[MVNum]; //顶点表

int arcs[MVNum][MVNum]; //邻接矩阵

int vexnum; //图的当前点数

int arcnum; //边数

string info[MVNum]; //景点介绍

}G;

主函数调用其它函数

4.详细设计

#include

#include

//图的邻接矩阵存储表示

#define MaxInt 32767 //极大值

#define MVNum 100 //最大顶点数

//顶点类型为字符型

typedef int ArcType; //边的权值为整型using namespace std;

int i, j;

int S[100], D[100], min, Path[100];

int N = 49;

int bestcost = MaxInt; //记录目前最少运费或代价

int currentcost; //当前运费或代价

int current[MaxInt]; //当前路径

int best[MaxInt]; //记录最佳路径

struct AMGraphd

{

string vexs[MVNum]; //顶点表

int arcs[MVNum][MVNum]; //邻接矩阵

int vexnum; //图的当前点数

int arcnum; //边数

string info[MVNum]; //景点介绍

}G;

//-------------------------------------------------

void swap(int& a, int& b)

{

int temp = a;

a = b;

b = temp;

}

void backtrack(int t)//其实就是一个排列问题。。。

{

int j;

if (t == N)//到了最后一层。。

{

if (G.arcs[current[t - 1]][current[t]] + G.arcs[current[t]][1] +

currentcost

{

bestcost = G.arcs[current[t - 1]][current[t]] + G.arcs[current[t]][1] + currentcost;

for (j = 1; j <= N; j++)

{

best[j] = current[j];

}

}

}

for (j = t; j <= N; j++)//排列。。。

{

swap(current[t], current[j]);

if (G.arcs[current[t - 1]][current[t]] + currentcost

//其实currentcost就是包括了1-->(t-1)的代价或运费

{

currentcost += G.arcs[current[t - 1]][current[t]];

backtrack(t + 1);//递归回溯

currentcost -= G.arcs[current[t - 1]][current[t]];

}

swap(current[t], current[j]);

}

}

//-------------------------------------------

void all()

{

int i;

相关文档
最新文档