图的邻接矩阵实现问题课件

上传人:陈** 文档编号:158537823 上传时间:2022-10-05 格式:PPT 页数:17 大小:464.50KB
收藏 版权申诉 举报 下载
图的邻接矩阵实现问题课件_第1页
第1页 / 共17页
图的邻接矩阵实现问题课件_第2页
第2页 / 共17页
图的邻接矩阵实现问题课件_第3页
第3页 / 共17页
资源描述:

《图的邻接矩阵实现问题课件》由会员分享,可在线阅读,更多相关《图的邻接矩阵实现问题课件(17页珍藏版)》请在装配图网上搜索。

1、 设计目的 通过对图遍历的程序编写,掌握邻接矩阵的定义,并对其进行深度优先搜索和广度优先搜索。1.测试图的手工表示结果。测试图的手工表示结果。2.测试图的数据表示,邻接矩阵特点。测试图的数据表示,邻接矩阵特点。邻接矩阵,对与图G,可用一个方阵A=(aij)n*n表示,其中aij=1,表示vi和vj之间有边,为0表示无边。邻接矩阵可表示自环和重边,在有向图中,aij表示定点vi和vj之间边的条数。无向图的邻接矩阵一定是对称的,而有向图的邻接矩阵不一定对称。因此,用邻接矩阵来表示一个具有n个顶点的有向图时需要n2个单元来存储邻接矩阵;对有n个顶点的无向图则只存入上(下)三角阵中剔除了左上右下对角线

2、上的0元素后剩余的元素,故只需1+2+.+(n-1)=n(n-1)/2个单元。无向图邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的度。有向图邻接矩阵中第i行非零元素的个数为第i个顶点的出度,第i列非零元素的个数为第i个顶点的入度,第i个顶点的度为第i行与第i列非零元素个数之和。用邻接矩阵表示图,很容易确定图中任意两个顶点是否有边相连。3.图的类设计方法。图的类设计方法。对于深度优先搜索我们采用递归操作;广度优先搜索采用非递归对于深度优先搜索我们采用递归操作;广度优先搜索采用非递归操作,在此过程中引用栈消除递归。操作,在此过程中引用栈消除递归。类类DFS用于深度优先搜索,栈用于深度

3、优先搜索,栈g1为其边赋值。为其边赋值。类类BFS用于广度优先搜索,栈用于广度优先搜索,栈g2为其边赋值。为其边赋值。图类图类Graphm用于定义图中顶点和边的相关信息。用于定义图中顶点和边的相关信息。源程序:public class BFS/*param args*/public static void main(String args)/TODO Auto-generated method stubchar m=a,b,c,d,e,f,g,h;Graphm g1=new Graphm(8);/给图的边赋值g1.setedge(0,1,1);g1.setedge(1,3,1);g1.sete

4、dge(1,4,1);g1.setedge(3,7,1);g1.setedge(4,7,1);g1.setedge(0,2,1);g1.setedge(2,5,1);g1.setedge(2,6,1);g1.setedge(5,6,1);/深度优先搜索方法/System.out.println(深度优先输出:);/DFS(g1,0,m);/System.out.println();/Graphm g2=new Graphm(8);/给图的边赋值/g2.setedge(0,1,1);/g2.setedge(1,3,1);/g2.setedge(1,4,1);/g2.setedge(3,7,1);

5、/g2.setedge(4,7,1);/g2.setedge(0,2,1);/g2.setedge(2,5,1);/g2.setedge(2,6,1);/g2.setedge(5,6,1);/System.out.println(广度度优先输出:);/BFS(g2,0,m,8);for(int i=0;i8;i+)for(int j=0;j8;j+)System.out.print(g1.matrixij+);System.out.println();/深度优先搜索方法static void DFS(Graphm G,int v,char m)System.out.print(mv+);G.s

6、etmark(v,1);for(int w=G.first(v);wG.n();w=G.next(v,w)if(G.getmark(w)=0)DFS(G,w,m);/广度优先搜索方法static void BFS(Graphm G,int start,char m,int v1)int v,w;int vn=v1+1;int qu=new intvn;int front,rear;front=rear=0;rear+;qurear=mstart;G.setmark(start,1);while(front!=rear)front=(front+1)%vn;v=qufront-97;System

7、.out.print(mv+);for(w=G.first(v);wG.n();w=G.next(v,w)if(G.getmark(w)=0)G.setmark(w,1);qu+rear=mw;/*图类*author Administrator*/class Graphmint numvertex,numedge;/图中顶点的个数numvertex,与边的个数numedgepublic int matrix=new int88;/二维矩阵,用于存储边的信息int mark=new int8;/数组,用于存储图中的顶点是否被访问public Graphm(int numvert)/图的构造函数i

8、nt i,j;numvertex=numvert;numedge=0;for(i=0;inumvertex;i+)for(j=0;jnumvertex;j+)matrixij=0;/赋初值没被访问0int n()/返回图中顶点的个数return numvertex;int e()/返回图中边的个数return numedge;int first(int v)/寻找与顶点v相邻最近的元素int i;for(i=0;inumvertex;i+)if(matrixvi!=0)return i;return i;int next(int v1,int v2)/寻找在顶点v2后与顶点v1相邻最近的元素i

9、nt i;for(i=v2+1;inumvertex;i+)if(matrixv1i!=0)return i;return i;void setedge(int v1,int v2,int wgt)/设置由顶点v1与v2构成的边的权重if(matrixv1v2=0)numedge+;matrixv1v2=wgt;void deledge(int v1,int v2)/删除由顶点v1与v2构成的边if(matrixv1v2!=0)numedge-;matrixv1v2=0;int weight(int v1,int v2)/返回由顶点v1与v2构成的边的权重return matrixv1v2;int getmark(int v)/返回顶点v的标识信息return markv;void setmark(int v,int val)/设置顶点v的标识信息markv=val;void clear()/清除图的顶点的标识信息void clear()/清除图的顶点的标识信息for(int i=0;inumvertex;i+)marki=0;4.测试结果测试结果精品课件精品课件!精品课件精品课件!5.遇到的问题 初次使用eclipse,很多功能都不是很熟悉。小组分工不明确,导致实验进度缓慢。刚开始接触java,很多语句用法和C、C+不相同,需要慢慢摸索。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!