邻接矩阵实现无向图有向图基本操作.doc_第1页
邻接矩阵实现无向图有向图基本操作.doc_第2页
邻接矩阵实现无向图有向图基本操作.doc_第3页
邻接矩阵实现无向图有向图基本操作.doc_第4页
邻接矩阵实现无向图有向图基本操作.doc_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

邻接矩阵实现无向图有向图基本操作/*/*以无向图为基类,有向图为派生类,以邻接矩阵为存储方式,实现无向图,有向图的建立,插入,删除等操作*/*/#include iostream#include string using namespace std;struct _ArcInfo/边信息char*v1;char*v2;struct _VexInfoint adj;/顶点类型,是否相邻接;class UnDirectGraphpublic:int ArcNum;/边数_ArcInfo ArcInfo;_VexInfo 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 void 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);/删除有向图中一条弧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(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 ArcInfo.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+;for(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;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;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()/创建有向图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;void 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*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);for(int j=k+1;j VexNum;j+)Vexsj-1=Vexsj;VexNum-;cout删除后结点数:VexNum endl;cout删除后弧数:ArcNum 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.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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论