南邮数据结构实验三图的基本运算及飞机换乘次数最少问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
{
maxSize = mSize;
q = new T[maxSize];
front = rear = 0;
}
template
bool SeqQueue
{
if (IsEmpty())
{
return false;
}
x = q[(front + 1) % maxSize];
return true;
}
template
bool SeqQueue
if (IsFull())
{
cout <<"Full"<< endl;
return false;
}
q[rear = (rear + 1) % maxSize] = x;
return true;
}
template
bool SeqQueue
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
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 { 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; e++; return Success;