数据结构-校园导游程序(附源码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;