ImageVerifierCode 换一换
你正在下载:

作业16.docx

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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

作业16.docx

1、作业16分别使用邻接矩阵和邻接表实现图数据结构及其相关操作:(1) 实现构造和析构函数;(3) 图的数据(顶点和边信息)从终端输入,实现相应的输入函数;(4) 统计每一个顶点的度(视为有向图时,分别给出入度和出度);(5) 给出图的DFS和BFS遍历序列;(6) 当此图为有向无环图时,给出拓扑排序序列;template class LLN public: LLN(T x,LLN * l); virtual LLN(); T data; LLN * link;template LLN:LLN(T x,LLN * l) data=x; link=l;template LLN:LLN()#inclu

2、deLLN.htemplate class LS public: bool GetTop(T& x); /T GetTop(); void push(T x); bool pop(); bool IsEmpty(); LS(); virtual LS(); LLN * top;template LS:LS() top=NULL;template LS:LS() while(top) LLN * p=top-link; delete top; top=p; template bool LS:IsEmpty() return top=NULL?true:false;template bool LS

3、:pop() if(IsEmpty() return false; else LLN * p=top; top=top-link; delete p; return true; template void LS:push(T x) top=new LLN(x,top);template bool LS:GetTop(T& x) if(IsEmpty() return false; else x=top-data; return true; #include #include templateclass QueC public: void MakeEmpty(); bool IsFull();

4、bool IsEmpty(); T GetFront(); bool DeQ(); bool EnQ(T x); QueC(int sz = 10); virtual QueC(); int rear, front; T *elements; int maxSize;templateQueC:QueC(int sz): front(0), rear(0), maxSize(sz) elements=new TmaxSize; assert(elements!=NULL);templateQueC:QueC() delete elements;templatebool QueC:EnQ(T x)

5、 if (IsFull() = true) return false; elementsrear=x; rear=(rear+1)%maxSize; return true;templatebool QueC:DeQ() if (IsEmpty() = true) return false; front = (front+1) % maxSize; return true;templateT QueC:GetFront() if (IsEmpty() = true) return false; return elementsfront;templatebool QueC:IsEmpty() r

6、eturn (front = rear)?true:false;templatebool QueC:IsFull() return (rear+1) % maxSize = front)?true:false;templatevoid QueC:MakeEmpty() front = rear = 0;class GM public: void TopoSt(); void BFS(); void DFS(); void DFS(int i,bool * v); int InRank(int n); int Rank(int m); bool Create(); int * edge; cha

7、r * ver; int numV; int maxV; GM(int sz); virtual GM();#include stdafx.h#include GM.h#include #include QueC.h#include LS.hGM:GM(int sz) maxV=sz; ver=new charsz; edge=new intsz*sz; numV=0;GM:GM() delete edge; delete ver;bool GM:Create() cout输入顶点个数(顶点个数不能大于maxV):numV; if (numVmaxV) couterror!endl; retu

8、rn false; else cout输入顶点信息数组:endl; for (int i=0;iveri; cout输入边信息数组(1有关,0无关):endl; for (i=0;iedgei; cout边信息数组为:endl; for (i=0;inumV*numV;i+) coutedgei ; if(i+1)%numV=0) coutendl; return true; int GM:Rank(int m) if(mnumV) return -1; else int count=0; for (int i=m*numV;i(m+1)*numV);i+) count=count+edgei

9、; return count; int GM:InRank(int n) if(nnumV) return -1; else int count=0; for(int j=n;jnumV*numV;j=j+numV) count=count+edgej; return count; void GM:DFS(int i,bool * v) vi=true; coutveri ; for (int j=i*numV;j(i+1)*numV);j+) if(!vj%numV&edgej=1) /j%numV是对应顶点的列号, DFS(j%numV,v); /vj%numV判断顶点是否被访问过 voi

10、d GM:DFS() bool * v=new boolnumV; for (int i=0;inumV;i+) vi=false; for (i=0;inumV;i+) if(vi) continue; DFS(i,v); coutendl; delete v;void GM:BFS() bool * v=new boolnumV; for (int i=0;inumV;i+) vi=false; QueC q; for (i=0;inumV;i+) if(vi) continue; else q.EnQ(i); coutveri ; vi=true; while (!q.IsEmpty()

11、 int n=q.GetFront(); q.DeQ(); for (int j=n*numV;j(n+1)*numV);j+) if (!vj%numV&edgej=1) vj%numV=true; coutverj%numV ; q.EnQ(j%numV); coutendl; void GM:TopoSt() cout拓扑排序:; LS ls; int IR81; for (int i=0;inumV;i+) IRi=InRank(i); for (i=0;inumV;i+) if (IRi=0) ls.push(i); int count=0; while (!ls.IsEmpty()

12、 int top; ls.GetTop(top); coutvertop ; ls.pop(); count+; for (int j=top*numV;j(top+1)*numV);j+) if (edgej=1) IRj%numV-; if (IRj%numV=0) ls.push(j%numV); if (countnumV) cout存在有向环。endl; #include stdafx.h#include GM.h#include int main(int argc, char* argv) GM gm(10); gm.Create(); int i; couti; cout此顶点的

13、出度:gm.Rank(i)endl; cout此顶点的入度:gm.InRank(i)endl; cout深度优先:; gm.DFS(); cout广度优先:; gm.BFS(); gm.TopoSt(); coutendl; return 0;class Vertex public: Vertex(); virtual Vertex(); char data; Edge * adj;#include stdafx.h#include Vertex.hVertex:Vertex()Vertex:Vertex()class Edge public: Edge(int num); virtual E

14、dge(); int dest; Edge * link;#include stdafx.h#include Edge.hEdge:Edge(int num) dest=num; link=NULL;Edge:Edge()#include Vertex.hclass GL public: void TopoSt(); void BFS(); void DFS(); int InRank(int j); int Rank(int i); bool Create(); GL(int sz); virtual GL(); int maxV; int numV; Vertex * NodeTable;

15、protected: void DFS(int i,bool * v);#include stdafx.h#include GL.h#include #include QueC.h#includeLS.hGL:GL(int sz) maxV=sz; NodeTable=new Vertexsz; numV=0;GL:GL() for (int i=0;ilink; delete p; p=q; bool GL:Create() cout输入顶点个数(顶点个数不能大于maxV):numV; if (numVmaxV) couterror!endl; return false; else cout

16、输入顶点的信息:endl; for (int i=0;iNodeTablei.data; NodeTablei.adj=NULL; cout输入边的信息,输入中含-1时停止:vede; if (ve=-1)|(de=-1) break; Edge * p=new Edge(NULL); p-dest=de; p-link=NodeTableve.adj; NodeTableve.adj=p; return true; int GL:Rank(int i) if(inumV) return -1; else Edge * p=NodeTablei.adj; int count=0; while

17、(p) +count; p=p-link; return count; int GL:InRank(int j) if(jnumV) return -1; else int count=0; for(int i=0;idest=j) +count; p=p-link; return count; void GL:DFS(int i,bool * v) vi=true; coutNodeTablei.datalink) if(!vp-dest) DFS(p-dest,v); void GL:DFS() bool * v=new boolnumV; for (int i=0;inumV;i+) v

18、i=false; for (i=0;inumV;i+) if(vi) continue; DFS(i,v); coutendl; delete v;void GL:BFS() bool * v=new boolnumV; for (int i=0;inumV;i+) vi=false; QueC q; for (i=0;inumV;i+) if(vi) continue; else q.EnQ(i); coutNodeTablei.datalink) if (!vp-dest) vp-dest=true; coutdest.datadest); coutendl; void GL:TopoSt

19、() cout拓扑排序:; LS ls; int IR81; for (int i=0;inumV;i+) IRi=InRank(i); for (i=0;inumV;i+) if (IRi=0) ls.push(i); int count=0; while (!ls.IsEmpty() int top; ls.GetTop(top); coutNodeTabletop.datalink) IRp-dest-; if (IRp-dest=0) ls.push(p-dest); if (countnumV) cout存在有向环。endl; LS.h/LLN.h/QueC.h是模板#include stdafx.h#include GL.h#include int main(int argc, char* argv) GL gl(10); gl.Create(); int m; coutm; cout此顶点的出度:gl.Rank(m)endl; cout此顶点的入度:gl.InRank(m)endl; cout深度优先:; gl.DFS(); cout广度优先:; gl.BFS(); gl.TopoSt(); coutendl; return 0;

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

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