校园导游实验报告

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

校园导游实验报告

一、需求分析及规格说明

用无向网表示学校的校园景点平面图,所含景点不少于十个。图中顶点表示主要景点,存放景点的代码和名称等信息,图中的边表示景点间的道路,存放路径长度等信息。设计一个校园导游程序,为来访的客人提供各种信息查询服务。

a)简易菜单管理,界面友好。

b)对城市信息(城市名、城市间的里程)进行录入和编辑(可选);

c)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径,给出相应的距离。

d)对于任意两个景点之间的一条最短的简单路径,给出所经过景点的信息和距离。对景点采用相应的字符选择。

二、概要设计

1、数据存储结构:

class Graph //双向图

{

private:

int m_maxsize; //图的最大顶点数

int m_vexNum; //图中存储的点的数量

string * m_name; //顶点的名称

int **m_mat; //邻接矩阵

int *m_path, //存放求最短路径时的路径

int *m_distance; //求最短路径时,最短路径的长度

bool *m_visited; //求最短路径时,点是否已访问

int MinVex();

void Dijkstra(int st); //Dijkstra算法

public:

Graph(int size, int n,const string *name, int **mat); //构造函数

~Graph(); //析构函数

int GetNum(); //获取图中顶点个数

string& GetVex(int i); //获取i号点的名称

bool AddVex(const string& name); //增加顶点

bool AddEdge(int x, int y, int dis); //增加边

bool DeleteVex(int n); //删除点

bool DeleteEdge(int x, int y); //删除边

void Print()const; //打印图的信息

void PrintPath(int st, int de); //打印最短路径

int ShortPath(int st, int de); //获取最短路径长度};

2、基本操作

//从文件读取数据

void ReadFile(int &n, int &m, int **mat, string* L);

//手动输入数据

void InputData(int &maxsize, int &n, int &m, int **mat, string *L);

三、详细设计

Graph(int size, int n,const string *name, int **mat)

{

//第一个参数为图的最多点的数量

//第二个参数为图中点的个数

//m_name申请size大小的string空间,并用第三个参数进行赋值

//m_mat申请size*size的int二维空间,并用第四个参数进行赋值

// m_path 申请size大小的int空间

//m_distance申请size大小的int空间

//m_visited 申请size大小的int空间

}

~Graph()

{

//释放m_name的空间;

//释放m_path的空间;

//释放m_distance的空间;

//释放m_visited的空间;

//释放m_mat的二维空间;

}

void Graph::Dijkstra(int st)

{

//将m_visited数组初始化为false,表示全部未访问

//将m_distance数组的值初始化为该点到起点的距离

//将m_path数组的值初始化为起点的坐标

//置顶点为已访问,即设置m_visited[]为true

//查找为访问点中,到起点距离最近的点,并置该点为已访问

//调整经过该点到起点的距离比较近的点,重置最短距离及路径的信息

}

void Graph::PrintPath(int st, int de)

{

//调用Dijkstra(st)

//定义int类型的栈,存放路径信息,并将终点坐标入栈

//通过m_path,将最短路径上的点一个个按顺序入栈,直到走到终点,栈中存放的是从终点到起点的路径

//重新从栈中将点出栈,打印,得到从起点到终点的路径

}

bool Graph::AddVex(const string& name)

{

//点的数量加1,并将字符串存入名字数组中

//并在邻接矩阵下方增加一行,右方增加一列,初始值为最大

}

bool Graph::AddEdge(int x, int y, int dis)

{

//重置邻接矩阵中对应的位置的值为传入的第三个参数

}

bool Graph::DeleteVex(int n)

{

//点的数量减1

//删除其在邻接矩阵中对应的行与列,即将其下方数据全部向上移,其右方数据全部往左移}

bool Graph::DeleteEdge(int x,int y)

{

//重置邻接矩阵中对应的位置的值为最大,代表没有边

}

四、调试分析

1、在进行求最短距离的操作的过程中,输出结果超出int范围,无法得到结果。通过反复调试,发现最大值去INT_MAX时,由于可能会执行INT_MAX+dist语句,使得结果无法判断。将最大值该为INT_MAX/2,解决问题。

相关文档
最新文档