Java实现基于邻接表的图的建立
2017-05-13 15:31
471 查看
Java实现基于邻接表的图的建立
图类:package graph; /** * * @author linziyu *基于构造好的矩阵进行图结构的建立 */ public class Graph { /*定义边节点*/ public class edgeNode { int ivex;//该边指向的顶点的位置 edgeNode nextNode; //指向下一个边节点 } /*定义点节点*/ public class vexNode{ char data; //该点的点信息 edgeNode firstEdge;//该点指向的第一条边 } vexNode[] vexArray;//顶点数组 /* * 将node节点链接到目标节点target的最后 */ public void linkLast(edgeNode target ,edgeNode node) { while (target.nextNode!=null) { target=target.nextNode; } target.nextNode=node; } /* * 返回字符data在顶点数组的位置 */ public int getPostio(char data) { for(int i=0;i<vexArray.length;i++) { if (data==vexArray[i].data) { return i; } } return -1; } /* * 创建基于邻接表的图 * vexs是顶点的数组,edges是边的数组 */ public void buildGraph(char[] vexs,char[][] edges) { int vLen = vexs.length;//得到顶点的数量大小 int eLen = edges.length;//得到边的数量大小 vexArray = new vexNode[vLen];//创建顶点数组 /* * 初始化顶点数组 */ for(int i=0;i<vexArray.length;i++) { vexArray[i] = new vexNode();//创建顶点节点 vexArray[i].data = vexs[i];//把参数顶点数组的数据赋予到使用的顶点数组中 vexArray[i].firstEdge = null;//第一条连接的边先置空 } /* * 初始化边 */ for(int i=0;i<eLen;i++) { char c1 = edges[i][0];//起始字符 char c2 = edges[i][1];//终点字符 int start = getPostio(c1);//起始字符位置 int end = getPostio(c2);//终点字符位置 edgeNode eNode1 = new edgeNode();//新建一个边节点 eNode1.ivex = end;//指向终点位置 /* * 如果该顶点的第一条连接边为空则指向新建的节点eNode1 * 不然就把该节点放在最后 */ if (vexArray[start].firstEdge==null) { vexArray[start].firstEdge = eNode1; } else { linkLast(vexArray[start].firstEdge,eNode1); } edgeNode eNode2 = new edgeNode();//新建节点 eNode2.ivex = start;//指向起始位置 /* * 同上 */ if (vexArray[end].firstEdge==null) { vexArray[end].firstEdge = eNode2; } else { linkLast(vexArray[end].firstEdge, eNode2); } } } /** * 输出图 */ public void print() { System.out.printf("List Graph:\n"); for (int i = 0; i < vexArray.length; i++) { System.out.printf("%d(%c): ", i, vexArray[i].data);//输出节点的位置和数据 edgeNode node = vexArray[i].firstEdge;//得到节点的第一人连接边 /* * 循环输出边数据 */ while (node != null) { System.out.printf("%d(%c) ", node.ivex, vexArray[node.ivex].data); node = node.nextNode; } System.out.printf("\n"); } } }
测试类:
package graph; public class Test { public static void main(String[] args) { char[] vexs = {'A','B','C','D','E','F','G'}; char[][] edges = new char[][] { {'A', 'C'}, {'A', 'D'}, {'A', 'F'}, {'B', 'C'}, {'C', 'D'}, {'E', 'G'}, {'F', 'G'}}; Graph aGraph = new Graph(); aGraph.buildGraph(vexs, edges); aGraph.print(); } }
相关文章推荐
- 基于rsync同步算法的文件同步系统JAVA实现(三)——校验码哈希表的建立
- Java实现基于邻接表的图的几个应用
- Java实现基于邻接表的图的深度和广度遍历
- 基于JAVA技术的搜索引擎的研究与实现
- 利用Java技术实现基于XML的Web服务
- 基于JAVA技术的搜索引擎的研究与实现
- 用RMI实现基于Java的分布式计算
- 基于JAVA技术的搜索引擎的研究与实现
- Java 与 .NET 的基于 WS-Security的Web Services集成实现(上)
- 一个基于Winform+Java WebService的实现
- 基于Java实现简单Http服务器之一
- 基于JAVA技术的搜索引擎的研究与实现
- 用Java实现基于CORBA的自动负载均衡
- 基于JAVA技术的搜索引擎的研究与实现
- 基于JAVA技术的搜索引擎的研究与实现
- 基于Java实现Http服务器之二
- 基于Java实现Http服务器之二
- 用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)
- 基于Java技术的Web环境下分布式数据库互操作性的实现
- Ajax - JavaScript之实现私有属性、像C++和Java一样支持基于类的继承方法之例子