南邮数据结构实验三
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
(2015 / 2016 学年第一学期)
课程名称数据结构
实验名称图的基本运算及飞机换乘次数最少问题
实验时间2015 年12 月 4 日
指导单位计算机科学与技术系
指导教师黄海平
学生姓名陈明阳班级学号Q14010119 学院(系) 贝尔英才专业信息科技强化班
实验报告
实验名称图的基本运算及飞机换乘次数最少问题指导教师黄海平
实验类型验证实验学时 4 实验时间12.4
一、实验目的和要求
飞机最少换乘次数问题。
(1)设有n个城市,编号为0~n-1,m条航线的起点和终点由用户输入提供。寻找一条换乘次数最少的线路方案。
(2)参考:可以使用有向图表示城市间的航线;只要两城市间有航班,则图中这两点间存在一条权值为1的边;可以使用Dijkstra算法实现。
二、实验环境(实验设备)
VSUAL STUDIO2015
三、实验原理及内容
对象视图:
源代码:
Graph.h
#include
#include
using namespace std;
const int INF = 2147483647;
enum ResultCode { Underflow, Duplicate, Failure, Success, NotPresent, OutOfBounds }; template
class Graph//抽象类
{
public:
virtual ResultCode Insert(int u, int v, T w) = 0;
virtual ResultCode Remove(int u, int v) = 0;
virtual bool Exist(int u, int v)const = 0;
protected:
int n, e;
};
template
class MGraph :public Graph
{
public:
MGraph(int mSize, const T noedg);
~MGraph();
ResultCode Insert(int u, int v, T w);
ResultCode Remove(int u, int v);
bool Exist(int u, int v)const;
int Choose(int *d, bool *s);
void Dijkstra(int v, T *d, int *path);
protected:
T **a;
T noEdge;
};
template
MGraph
{
n = mSize;
e = 0;
noEdge = noedg;
a = new T*[n];
for (int i = 0; i { a[i] = new T[n]; for (int j = 0; j a[i][j] = noEdge; a[i][i] = 0; } } template MGraph { for (int i = 0; i delete[]a[i]; delete[]a; } template ResultCode MGraph { if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v) return Failure; if (a[u][v] != noEdge) return Duplicate; a[u][v] = w; a[v][u] = w; e++; return Success; } template ResultCode MGraph { if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v) return Failure; if (a[u][v] == noEdge) return NotPresent; a[u][v] = noEdge; a[v][u] = noEdge; e--; return Success; } template bool MGraph { if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v || a[u][v] == noEdge) return false; return true; } template int MGraph { int i, minpos; T min;