数据结构实验报告-交通指南

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

班级:计嵌141

姓名:陈志远

学号:1413052023

交通指南系统

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、源代码

#include

using namespace std;

struct ArcCell

{

int adj; //存放弧长

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

};

struct _MGraph

{

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

ArcCell arcs[20][20]; //

int vexnum;

int arcnum;

};

typedef int Path[20][20][20];

typedef int Distanc[20][20];

class MGraph //没用私有成员

{

public:

_MGraph mgraph;//

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

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

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

};

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;

}

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;

}

int MGraph::LocateVex(char u)

{

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

{

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

{

return i;

}

}

return -1;

}

void MGraph::ShortestPath_FLOYD(Path &P,Distanc &D)//求每对顶点间得最短路径// 用Floyd算法求有向网G中各对顶点v与w之间得最短路径P[v][w]及其带权长度D[v][w]

// 若P[v][w][u]为TRUE,则u就是从v到w当前求得最短路径上得顶点。

{

int u,v,w,i;

for(v = 0;v

{

for(w = 0;w

相关文档
最新文档