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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

邻接矩阵实现无向图有向图基本操作.docx

1、邻接矩阵实现无向图有向图基本操作邻接矩阵实现无向图有向图基本操作/*/ /*以无向图为基类,有向图为派生类,以邻接矩阵为存储方式,实现无向图,有向 图的建立,插入,删除等操作*/ /*/ #include iostream #include string using namespace std; struct _ArcInfo/边信息 char*v1; char*v2; ; struct _VexInfo int adj;/顶点类型,是否相邻接 ; class UnDirectGraph public: int ArcNum;/边数 _ArcInfo ArcInfo; /邻接矩阵 _VexIn

2、fo AdjMax2020;int VexNum;/顶点数 char*Vexs20;/存放顶点 public: UnDirectGraph(); UnDirectGraph(); int LocateVex(char*Vex);/获得节点在图中序号,在邻接矩阵中使用 virtual void CreateGraph();/构造无向图 void ShowGraph();/输出邻接矩阵 void InsertVex(char*&newVex);/向无向图中插入一个新节点 virtual void InsertArc(char*&v1,char*&v2);/向无向图中插入一条边 virtual vo

3、id DeleteVex(char*oldVex);/删除一个节点 virtual void DeleteArc(char*&v1,char*&v2);/删除一条边 ; class DirectGraph:public UnDirectGraph/有向图继承无向图 public: DirectGraph(); DirectGraph(); 重写基类的四个函数,基类中相应函数设为虚函数 /void CreateGraph();/构造有向图 void InsertArc(char*&v1,char*&v2);/向有向图中插入一条弧 void DeleteArc(char*&v1,char*&v2)

4、;/删除有向图中一条弧 void DeleteVex(char*oldVex);/删除有向图中的一个顶点 ; UnDirectGraph:UnDirectGraph() VexNum=0; ArcNum=0; int i; for(i=0;i 20;i+) Vexsi=new char; ArcInfo.v1=new char; ArcInfo.v2=new char; UnDirectGraph:UnDirectGraph() int UnDirectGraph:LocateVex(char*Vex)/获取节点vex在图中的位置 int i; for(i=0;i VexNum;i+) if(

5、strcmp(Vex,Vexsi)=0) return i; return 0; void UnDirectGraph:CreateGraph()/创建无向图 cout输入顶点数和边数:; cin VexNum ArcNum; int i,j,k; cout输入各个顶点:endl; for(i=0;i VexNum;i+)/输入顶点 cin Vexsi; for(i=0;i VexNum;i+) for(j=0;j VexNum;j+) AdjMaxij.adj=0;/邻接矩阵初始化各点不相邻 for(k=0;k ArcNum;k+) cout输入边的信息:; cin ArcInfo.v1 A

6、rcInfo.v2; i=LocateVex(ArcInfo.v1); j=LocateVex(ArcInfo.v2); AdjMaxji.adj=AdjMaxij.adj=1;/无向图中两个顶点相邻 void UnDirectGraph:ShowGraph()/输出邻接矩阵 int i,j; for(i=0;i VexNum;i+) for(j=0;j VexNum;j+) coutAdjMaxij.adj;cout endl; void UnDirectGraph:InsertVex(char*&newVex)/向图中插入一个节点 VexsVexNum=newVex; VexNum+; f

7、or(int i=0;i VexNum;i+) AdjMaxiVexNum-1.adj=AdjMaxVexNum-1i.adj=0;/插入一个孤立节点 void UnDirectGraph:InsertArc(char*&v1,char*&v2)/在图中增加一条边 int i,j; i=LocateVex(v1); j=LocateVex(v2); if(i 0|j 0) return; ArcNum+; AdjMaxij.adj=AdjMaxji.adj=1; void UnDirectGraph:DeleteArc(char*&v1,char*&v2)/删除两个节点之间的边 int i,j

8、; i=LocateVex(v1); j=LocateVex(v2); ArcNum-; AdjMaxij.adj=AdjMaxji.adj=0; void UnDirectGraph:DeleteVex(char*oldVex) int k; int k1,k2; k=LocateVex(oldVex);/待删除节点的序号 for(int i=0;i VexNum;i+) k1=LocateVex(Vexsi); if(AdjMaxkk1.adj=1)/两节点之间有边 DeleteArc(oldVex,Vexsi);/删除该节点与其他结点之间的边 for(int j=k+1;j VexNum

9、;j+) Vexsj-1=Vexsj;/该节点之后的元素向前移 VexNum-; cout删除后顶点数:VexNum endl; cout删除后边数:ArcNum endl; DirectGraph:DirectGraph()/派生类的构造函数,首先要实现基类的构造函数 VexNum=0; ArcNum=0; int i; for(i=0;i 20;i+) Vexsi=new char; ArcInfo.v1=new char; ArcInfo.v2=new char; DirectGraph:DirectGraph() void DirectGraph:CreateGraph()/创建有向图

10、 cout输入有向图顶点数和弧数:; cin VexNum ArcNum; int i,j,k; cout输入有向图的各个顶点:endl; for(i=0;i VexNum;i+) cin Vexsi; for(i=0;i VexNum;i+) for(j=0;j VexNum;j+) AdjMaxij.adj=0; for(k=0;k ArcNum;k+) cout输入有向图1条弧的弧头和弧尾:endl; cin ArcInfo.v1 ArcInfo.v2; i=LocateVex(ArcInfo.v1); j=LocateVex(ArcInfo.v2); AdjMaxij.adj=1; v

11、oid DirectGraph:InsertArc(char*&v1,char*&v2)/向有向图中插入一条弧 int i,j; i=LocateVex(v1); j=LocateVex(v2); if(i 0|j 0) return; ArcNum+; AdjMaxij.adj=1; void DirectGraph:DeleteArc(char*&v1,char*&v2)/删除有向图中的一条弧 int i,j; i=LocateVex(v1); j=LocateVex(v2); ArcNum-; AdjMaxij.adj=0; void DirectGraph:DeleteVex(char

12、*oldVex)/删除有向图中的一个顶点 int k,k1; k=LocateVex(oldVex); for(int i=0;i VexNum;i+) k1=LocateVex(Vexsi);/ if(AdjMaxkk1.adj=1)/要删除结点为弧头的弧 DeleteArc(oldVex,Vexsi); if(AdjMaxk1k.adj=1)/要删除结点为弧尾的弧 DeleteArc(Vexsi,oldVex); j VexNum;j+) for(int j=k+1;Vexsj-1=Vexsj; VexNum-; cout删除后结点数:VexNum endl; cout删除后弧数:ArcN

13、um endl; int main() cout无向图操作endl; UnDirectGraph UDG=UnDirectGraph(); UDG.CreateGraph(); cout图的邻接矩阵:endl; UDG.ShowGraph(); char*newVex=new char; cout插入一个新节点:endl; cin newVex; UDG.InsertVex(newVex); cout插入新增加的边:endl; for(int i=0;i UDG.VexNum-1;i+) UDG.InsertArc(newVex,UDG.Vexsi);cout新图的邻接矩阵:endl; UDG

14、.ShowGraph(); cout删除一个节点endl; UDG.DeleteVex(UDG.Vexs3); UDG.ShowGraph(); cout有向图操作endl; DirectGraph DG=DirectGraph(); DG.CreateGraph(); cout有向图的邻接矩阵:endl; DG.ShowGraph(); cout向有向图中插入一个节点:endl; char*newVex1=new char; cin newVex1; DG.InsertVex(newVex1); DG.InsertArc(newVex1,DG.Vexs0);/向有向图中插入几条弧 DG.InsertArc(DG.Vexs2,newVex1); DG.InsertArc(DG.Vexs1,newVex1); DG.Sh

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

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