如何用java实现图的存储【邻接矩阵】 |
您所在的位置:网站首页 › 邻接矩阵表示法创建无向图 › 如何用java实现图的存储【邻接矩阵】 |
如何用java实现图的存储【邻接矩阵】
首先得考虑图的几条重要特性如何表示顶点如何表示边表示图中的边有两种方法,邻接矩阵和邻接表。如何构造邻接矩阵
如何把图打印出来看看结果附上代码
完结撒花
首先得考虑图的几条重要特性
怎么样可以确定一个图呢,我们先举个例子: 打个比方,顶点好比地图上的一个个城市,顶点间的边好比城市间的一条条公路,而边上的权值好比公路的长度(也就是城市间的距离)。 所以我们看到,要描述一个图,我们得用合适的方法表示好图的顶点,图上的边以及边的权值。 如何表示顶点1.我们看到图中的顶点是由字母组成的,因此用一维集合ArrayList来存储顶点字母,这样顶点的个数也可以用ArrayList内部方法求得。 先定义ArrayList类: 这样图中顶点就表示完毕了 2.如何图省事的话直接: char数组也可以,不过只能存放单个字符 如图(用于展示char数组,与本题图无关) 如图: 在图中,一条边得由两个顶点决定。因此,要表示一条边,得注明两边的顶点是哪些; 所以我们用二维数组来存储边,二维数组的行数和列数都是顶点的个数,二维数组中的值代表该行(某顶点)该列(某顶点)下的边的情况。 这里,我用0代表两顶点间无边,大于0的树值代表边的权值。 如何构造邻接矩阵有两种方法: 1.根据边的情况在初始化时写好二维数组,例如: 这里我们得注意:因为用二维数组表示图,必须让图中顶点对应相应的行和列; 比如这里0->“A” 1->“B” 2->“C” 3->“D” 4->“E”; 也可以是其他对应方式,但最好容易辨认; 这里推荐两种方式: graph.insertEdge(0,1,1);//A-B graph.insertEdge(0,3,1);//A-D graph.insertEdge(1,2,1);//B-C graph.insertEdge(1,3,1);//B-D graph.insertEdge(3,4,1);//D-E public void insertEdge(int v1,int v2,int weight){ edges[v1][v2] = weight; edges[v2][v1] = weight; numOfEdges++; }或者一下方式更加直观: graph.insert_char_Edge("A","B",1); graph.insert_char_Edge("A","D",1); graph.insert_char_Edge("B","C",1); graph.insert_char_Edge("B","D",1); graph.insert_char_Edge("D","E",1); public void insert_char_Edge(String a,String b,int weight){ int v1 = vertexList.indexOf(a);//返回对应的下标 int v2 = vertexList.indexOf(b);//返回对应的下标 edges[v1][v2] = weight; edges[v2][v1] = weight; numOfEdges++; }个人觉得:java写出来的代码比C++工整美观很多。 如何把图打印出来就是如何把我们构造好的邻接矩阵(二维数组)打印出来 这里给大家介绍一个技巧,就是用增强for循环来打印二维数组。 // 显示图对应的矩阵 public void showGraph(){ for(int[]link:edges){ System.out.println(Arrays.toString(link)); } } 看看结果
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |