南邮数据结构实验三

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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::MGraph(int mSize, const T noedg)

{

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::~MGraph()

{

for (int i = 0; i

delete[]a[i];

delete[]a;

}

template

ResultCode MGraph::Insert(int u, int v, T w)

{

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::Remove(int u, int v)

{

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::Exist(int u, int v)const

{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v || a[u][v] == noEdge)

return false;

return true;

}

template

int MGraph::Choose(int *d, bool *s) //求最小d[i]

{

int i, minpos;

T min;

相关文档
最新文档