ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:55.17KB ,
资源ID:11446114      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11446114.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(山东大学数据结构实验报告八.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

山东大学数据结构实验报告八.docx

1、山东大学数据结构实验报告八山东大学 软件工程 学院 数据结构 课程实验报告学号:姓名: 班级: 软件工程2014级2班实验题目: 图的操作实验学时:实验日期: 2015.12.9实验目的:掌握图的基本概念,描述方法;遍历方法。硬件环境:实验室软件环境:Vistual Studio 2013 实验步骤与内容:实验内容:1、创建图类。二叉树的存储结构使用邻接矩阵或链表。2、提供操作:遍历、BFS、DFS3、对建立好的图,执行上述各操作。4、输出生成树。5、输出最小生成树。代码体:Adjacencywdigraph.h#ifndef ADJACENCYWDIGRAPH_H#define ADJACE

2、NCYWDIGRAPH_Hclass AdjacencyWDigraph friend class AdjacencyWGraph;public: AdjacencyWDigraph(int Vertices = 10, int noEnge = 0); AdjacencyWDigraph(); bool Exist(int i, int j) const; int Edges() const return e; int Vertices() const return n; AdjacencyWDigraph& Add(int i, int j, const int& w = 1); Adja

3、cencyWDigraph& Delete(int i, int j); int OutDegree(int i) const; int InDegree(int i) const; void InitializePos() pos = new intn + 1; void DeactivatePos() delete pos; int Begin(int i); int NextVertex(int i); void BFS(int v, int reach, int label = 1); void DFS(int v, int reach, int label = 1); bool Co

4、nnected(int& x); int* SpanningTree(); int* SpanningMinTree(); void OutPut();private: int MinNum(); int Min(int v, int reach); bool Connecting(int i); void dfs(int v, int reach, int label); int NoEdge, n, e; int *a; int *pos;#endifAdjacencywdigraph.cpp#include#includeusing namespace std;#include adja

5、cencywdigraph.hAdjacencyWDigraph:AdjacencyWDigraph(int Vertices, int noEdge) n = Vertices; e = 0; NoEdge = noEdge; a = new int*n + 1; for (int i = 1; i = n; i+) ai = new intn + 1; for (int i = 1; i = n; i+) for (int j = 1; j = n; j+) aij = NoEdge;AdjacencyWDigraph:AdjacencyWDigraph() for (int i = 1;

6、 i = n; i+) delete ai; delete a;bool AdjacencyWDigraph:Exist(int i, int j) const if (i 1 | j n | j n | aij = NoEdge) return false; return true;AdjacencyWDigraph& AdjacencyWDigraph:Add(int i, int j, const int& w) if (i 1 | j n | j n) cout 错误!点 i 或点 j 不存在,无法添加边 endl; else if (aij != NoEdge) cout 错误!该边

7、已存在,无法再添加 endl; else aij = w; e+; return *this;AdjacencyWDigraph& AdjacencyWDigraph:Delete(int i, int j) if (i 1 | j n | j n | aij = NoEdge) cout 错误!该边不存在,无法删除 endl; else aij = NoEdge; e-; return *this;int AdjacencyWDigraph:OutDegree(int i) const if (i n) cout 错误,该点不存在! endl; return 0; else int sum

8、= 0; for (int j = 1; j = n; j+) if (aij != NoEdge) sum+; return sum; int AdjacencyWDigraph:InDegree(int i) const if (i n) cout 错误,该点不存在! endl; return 0; else int sum = 0; for (int j = 1; j = n; j+) if (aji != NoEdge) sum+; return sum; int AdjacencyWDigraph:Begin(int i) if (i n) cout 错误,该点不存在! endl;

9、return 0; else for (int j = 1; j = n; j+) if (aij != NoEdge) posi = j; return j; posi = n + 1; return 0; int AdjacencyWDigraph:NextVertex(int i) if (i n) cout 错误,该点不存在! endl; return 0; else for (int j = posi + 1; j = n; j+) if (aij != NoEdge) posi = j; return j; posi = n + 1; return 0; void Adjacenc

10、yWDigraph:BFS(int v, int reach, int label) if (v n) cout 错误,该点不存在! endl; return; queue q; InitializePos(); reachv = label; q.push(v); while (!q.empty() int w = q.front(); q.pop(); int u = Begin(w); while (u) if (!reachu) q.push(u); reachu = label; u = NextVertex(w); DeactivatePos();void AdjacencyWDi

11、graph:dfs(int v, int reach, int label) reachv = label; int u = Begin(v); while (u) if (!reachu) dfs(u, reach, label); u = NextVertex(v); void AdjacencyWDigraph:DFS(int v, int reach, int label) if (v n) cout 错误,该点不存在! endl; return; InitializePos(); dfs(v, reach, label); DeactivatePos();void Adjacency

12、WDigraph:OutPut() for (int i = 1; i = n; i+) for (int j = 1; j = n; j+) cout aij t; cout endl; bool AdjacencyWDigraph:Connecting(int i) int *reach = new intn + 1; for (int j = 1; j = n; j+) reachj = 0; BFS(i, reach, 1); for (int j = 1; j = n; j+) if (!reachj) deletereach; return false; delete reach;

13、 return true;bool AdjacencyWDigraph:Connected(int& x) bool *flag = new booln + 1; for (int i = 1; i = n; i+) flagi = Connecting(i); for (int i = 1; i = n; i+) if (flagi) x = i; return true; return false;int AdjacencyWDigraph:Min(int v, int reach) int k = 0, min = 0; for (int i = 1; i avi) k = i; min

14、 = avi; return k;int* AdjacencyWDigraph:SpanningTree() int x; if (!Connected(x) cout 该图不是连通图,无法生成树! endl; return 0; else InitializePos(); queue q; int *b = new int*n + 1; for (int i = 1; i = n; i+) bi = new intn + 1; for (int i = 1; i = n; i+) for (int j = 1; j = n; j+) bij = 0; int *reach = new int

15、n + 1; for (int i = 1; i = n; i+) reachi = 0; reachx = 1; q.push(x); while (!q.empty() int w = q.front(); q.pop(); int u = Begin(w); while (u) if (!reachu) q.push(u); bwu = awu; reachu = 1; u = NextVertex(w); delete reach; DeactivatePos(); return b; int AdjacencyWDigraph:MinNum() int k = 0, m = 0; f

16、or (int i = 1; i = n; i+) if (Connecting(i) int min = 0; for (int j = 1; j aij) min = aij; if (m & m min) m = min; k = i; else if (!m) m = min; k = i; return k;int* AdjacencyWDigraph:SpanningMinTree() int x; if (!Connected(x) cout 该图不是连通图,无法生成树! endl; return 0; else int *b = new int*n + 1; for (int

17、i = 1; i = n; i+) bi = new intn + 1; for (int i = 1; i = n; i+) for (int j = 1; j = n; j+) bij = 0; int *reach = new intn + 1; for (int i = 1; i = n; i+) reachi = 0; x = MinNum(); reachx = 1; int k1, k2, z, min = 1; while (min) min = 0; for (int i = 1; i aik2) min = aik2; z = i; k1 = k2; reachk1 = 1

18、; bzk1 = azk1; delete reach; return b; Adjacencywgraph.h#ifndef ADJACENCYWGRAPH_H#define ADJACENCYWGRAPH_H#include adjacencywdigraph.hclass AdjacencyWGraph :public AdjacencyWDigraphpublic: AdjacencyWGraph(int Vertices = 10, int noEdge = 0): AdjacencyWDigraph(Vertices, noEdge) AdjacencyWGraph& Add(in

19、t i, int j, const int& w = 1); AdjacencyWGraph& Delete(int i, int j); int Degree(int i) return OutDegree(i); bool Connected(); int* SpanningTree(); int* SpanningMinTree(); int MinNum();#endifAdjacencywgraph.cpp#include#includeusing namespace std;#include adjacencywgraph.hAdjacencyWGraph& AdjacencyWG

20、raph:Add(int i, int j, const int& w) if (i 1 | j n | j n) cout 错误!点 i 或点 j 不存在,无法添加边 endl; else if (aij != NoEdge) cout 错误!该边已存在,无法再添加 endl; else aij = w; aji = w; e+; return *this;AdjacencyWGraph& AdjacencyWGraph:Delete(int i, int j) if (i 1 | j n | j n | aij = NoEdge) cout 错误!该边不存在,无法删除 endl; else

21、 aij = NoEdge; aji = NoEdge; e-; return *this;bool AdjacencyWGraph:Connected() int *reach = new intn + 1; for (int i = 1; i = n; i+) reachi = 0; BFS(1, reach, 1); for (int i = 1; i = n; i+) if (!reachi) return false; return true;int* AdjacencyWGraph:SpanningTree() if (!Connected() cout 该图不是连通图,无法生成树

22、! endl; return 0; else InitializePos(); queue q; int *b = new int*n + 1; for (int i = 1; i = n; i+) bi = new intn + 1; for (int i = 1; i = n; i+) for (int j = 1; j = n; j+) bij = 0; int *reach = new intn + 1; for (int i = 1; i = n; i+) reachi = 0; reach1 = 1; q.push(1); while (!q.empty() int w = q.f

23、ront(); q.pop(); int u = Begin(w); while (u) if (!reachu) q.push(u); bwu = buw = awu; reachu = 1; u = NextVertex(w); DeactivatePos(); delete reach; return b; int AdjacencyWGraph:MinNum() int d = 0, e = 0, min = 0; for (int i = 1; i = n; i+) for (int j = 1; j = n; j+) if (aij != NoEdge & !min) min =

24、aij; d = i; e = j; else if (aij != NoEdge & aij min) min = aij; d = i; e = j; return d;int* AdjacencyWGraph:SpanningMinTree() if (!Connected() cout 该图不是连通图,无法生成树! endl; return 0; else int *b = new int*n + 1; for (int i = 1; i = n; i+) bi = new intn + 1; for (int i = 1; i = n; i+) for (int j = 1; j = n; j+) bij = 0; int *reach = new intn + 1; for (int i =

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1