数据结构—交通指南系统

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

南通大学数据结构实验课

实验报告

学生姓名

所在院系

专业

学号

指导教师

南通大学

2013年 12 月 11 日

交通指南系统

1.问题描述

假设以一个带权有向图表示某一区域的公交线路图,图中顶点代表一些区域中的重要站点,弧代表已有的公交线路,弧上的权表示该线路上的票价(或搭乘所需时间),试设计一个交通指南系统,指导前来咨询者以最低的票价或最少的时间从区域中的某一站点到达另一站点。

2.基本要求

(1)设计结点和图的存储结构;

(2)设计任意两点最短路径方法;

(3)输入:图的相关信息以建立公交线路网,以及公交线路网咨询的任意两个站点;

(4)输出:两个站点间一条最短的简单路径。

3.实现提示

(1)结点和图的存储结构

typedef struct node

{ int no;

float wgt;

struct node*next;

}edgenode;

typedef struct

{ char vtx;

edgenode*link;

} vexnode;

typedef vexnode Graph[n];;

void Floyd(Graph G,float A[n][n],int p[n][n])

{ int i,j,k;

for(i=0;i

fot(j=0;j

{ A[i][j]=G[i][j];

P[i][j]=-1;

}

for(k=0;k

for(i=0;i

for(j=0;j

if(A[i][k]+A[k][j]

{ p[i][j]=k;

A[i][j]=A[i][k]+A[k][j];

}

}

(2)算法提示

采用任意两点最短路径的相关算法。

4.算法设计

(1)结点类型:

struct ArcCell

{

int adj; //存放弧长

bool *info; //是否用过该弧

};

struct _MGraph

{

char vexs[20]; //存放站点

ArcCell arcs[20][20]; //

int vexnum;

int arcnum;

};

(2)类定义:

class MGraph //没用私有成员

{

public:

_MGraph mgraph;//

void DestroyGraph(); //析构函数销毁图

int LocateVex (char u); // 返回顶点在图中的位置bool CreateDN(); //构造有向网

void ShortestPath_FLOYD(Path &P,Distanc &D);

};

(3)构造有向网:

bool MGraph::CreateDN()//构造有向网

{

int i,j ,w;

char v1, v2;

cout<<"请输入站点个数,直接线路的条数: ";

cin>>mgraph.vexnum>>mgraph.arcnum ;

cout<<"\n请输入各站点名: ";

for(i = 0;i

{

cin>>mgraph.vexs[i];

}

for(i = 0;i

{

for(j = 0;j

{

if(i==j)

mgraph.arcs[i][j].adj = 0;

else

mgraph.arcs[i][j].adj = 20000; //infinity;

mgraph.arcs[i][j].info = false;

}

}

for(i = 0;i

{

cout<<"\n请输入一条线路的起点,终点,距离(公里): ";

cin>>v1>>v2>>w;

int m = LocateVex(v1);

int n = LocateVex(v2);

mgraph.arcs[m][n].adj = w; // 的权值}

return true;

}

(4)销毁有向图:

void MGraph::DestroyGraph()

{

for(int i = 0 ;i

for(int j = 0;j

{

if(mgraph.arcs[i][j].info)

{

delete []mgraph.arcs[i][j].info;

mgraph.arcs[i][j].info = false;

}

}

mgraph.vexnum = 0;

mgraph.arcnum = 0;

}

(5)定位点:

int MGraph::LocateVex(char u)

{

for(int i = 0 ;i<20;i++)

{

if(u == mgraph.vexs[i])

相关文档
最新文档