南邮数据结构实验三图的基本运算及飞机换乘次数最少问题

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

实验报告

( 2015 / 2016 学年第 2学期)

课程名称数据结构A

实验名称图的基本运算及飞行换乘次数最少问题实验时间年月日指导单位计算机科学与技术系

指导教师

学生姓名班级学号学院(系) 专业

试验一图的基本运算

一、问题描述

(1)验证教材中关于在邻接矩阵和邻接表两种不同存储结构上实现图的基本运算的算法(见程序9.1~程序9.8);

(2)在邻接矩阵存储结构上实现图的深度和广度优先遍历算法;

(3)设计主函数,测试上述运算;

(4)提示:扩充MGraph类,在扩充类上增加DFS和BFS函数;

二、概要设计

图如下所示,显示了名为operation_of_map的(默认文件名)工程,实现了Graph,SeqQueue,结点类ENode,邻接矩阵类MGraph,邻接表LGraph类,包括几种为不同传入类型准备的构造函数。声明所要求的函数,并在后续过程中实现函数功能,最后通过一个main函数求解。

三、详细设计

1.类与类的层次结构

四、程序代码

#include"stdafx.h"

#include

using namespace std;

const int INFTY = 2147483640;

enum ResultCode { Underflow, Duplicate, Failure, Success, NotPresent }; 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 SeqQueue

{

public:

SeqQueue(int mSize);

~SeqQueue() { delete[]q; }

bool IsEmpty() const { return front == rear; }

bool IsFull() const { return (rear + 1) % maxSize == front; }

bool Front(T &x)const;

bool EnQueue(T x);

bool DeQueue();

void Clear() { front = rear = 0; }

private:

int front, rear;

int maxSize;

T*q;

};

template

SeqQueue::SeqQueue(int mSize)

{

maxSize = mSize;

q = new T[maxSize];

front = rear = 0;

}

template

bool SeqQueue::Front(T &x)const

{

if (IsEmpty())

{

return false;

}

x = q[(front + 1) % maxSize];

return true;

}

template

bool SeqQueue::EnQueue(T x)//在队尾插入x {

if (IsFull())

{

cout <<"Full"<< endl;

return false;

}

q[rear = (rear + 1) % maxSize] = x;

return true;

}

template

bool SeqQueue::DeQueue()//删除队头元素{

if (IsEmpty())

{

cout <<"Underflow"<< endl;

return false;

}

front = (front + 1) % maxSize;

return true;

}

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;

void DFS();

void BFS();

protected:

T**a;

T noEdge;

void DFS(int v, bool*visited);

void BFS(int v, bool*visited);

};

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];

int j = 0;

for (j;j

a[i][j] = noEdge;

a[i][j] = 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;

e++;

return Success;

相关文档
最新文档