邻接表(Java)
来源:互联网 发布:手机淘宝改差评步骤 编辑:程序博客网 时间:2024/06/10 23:45
一、邻接表无线图
无向图的邻接表结构如下所示:
无向图的邻接表的代码实现:
/* * 邻接表无向图(已提供参数) * 输入说明:vexs -- 顶点数组 * edges -- 边数组 * 输出说明:邻接表(即每个顶点所连接的点) */package test;public class ListUDG { int vlen; // 顶点个数 int elen; // 边个数 VertexNode[] vertexNodeList; // 顶点数组 EdgeNode edgeNode; /** * 构造函数 * @param vexs * @param edges */ public ListUDG(char[] vexs, char[][] edges) { vlen = vexs.length; elen = edges.length; // 初始化顶点,建立顶点表 vertexNodeList = new VertexNode[vlen]; for (int i = 0; i < vlen; i++) { vertexNodeList[i] = new VertexNode(); vertexNodeList[i].vertex = vexs[i]; vertexNodeList[i].firstedge = null; } // 初始化边,利用头插法建立邻接表 for (int i = 0; i < elen; i++) { EdgeNode edgeNode_1 = new EdgeNode(); EdgeNode edgeNode_2 = new EdgeNode(); int vi = getPosition(edges[i][0], vexs); int vj = getPosition(edges[i][1], vexs); edgeNode_1.adjvex = edges[i][1]; edgeNode_1.next = vertexNodeList[vi].firstedge; vertexNodeList[vi].firstedge = edgeNode_1; edgeNode_2.adjvex = edges[i][0]; edgeNode_2.next = vertexNodeList[vj].firstedge; vertexNodeList[vj].firstedge = edgeNode_2; } } /** * 顶点表结点 */ private class VertexNode { char vertex; // 顶点域,存储顶点信息 EdgeNode firstedge; // 边表头指针 } /** * 边表结点 */ private class EdgeNode { char adjvex; // 邻接点域,存储该顶点对应的下标 EdgeNode next; // 链域,指向下一个邻接点 } /** * 返回ch位置 */ private int getPosition(char ch, char[] vexs) { for (int i = 0; i < vlen; i++) if (vexs[i] == ch) return i; return -1; } /** * 打印邻接表 */ public void print() { System.out.printf("AdjList:\n"); for (int i = 0; i < vlen; i++) { System.out.print(vertexNodeList[i].vertex + "-->"); if (vertexNodeList[i].firstedge != null) { EdgeNode mEdgeNode = new EdgeNode(); mEdgeNode = vertexNodeList[i].firstedge; System.out.print(mEdgeNode.adjvex); while (mEdgeNode.next != null) { mEdgeNode = mEdgeNode.next; System.out.print(mEdgeNode.adjvex); } System.out.print("\n"); } else { System.out.print("\n"); } } } /** * 主函数 * @param args */ public static void main(String args[]) { // 顶点数组 char[] vexs = { 'A', 'B', 'C', 'D' }; // 边数组 char[][] edges = new char[][] { { 'A', 'B' }, { 'A', 'C' }, { 'A', 'D' }, { 'B', 'D' }, { 'C', 'D' } }; ListUDG listUDG = new ListUDG(vexs, edges); listUDG.print(); }}
代码输出结果:
AdjList:A-->DCBB-->DAC-->DAD-->CBA
二、邻接表有向图
有向图的邻接表结构如下所示:
有向图的邻接表的代码实现:
/* * 邻接表有向图(已提供参数) * 输入说明:vexs -- 顶点数组 * edges -- 边数组 * 输出说明:邻接表(即对每个顶点vi都建立一个链接为vi为弧尾的表) */package test;public class ListDG { int vlen; // 顶点个数 int elen; // 边个数 VertexNode[] vertexNodeList; // 顶点数组 EdgeNode edgeNode; /** * 构造函数 * @param vexs * @param edges */ public ListDG(char[] vexs, char[][] edges) { vlen = vexs.length; elen = edges.length; // 初始化顶点,建立顶点表 vertexNodeList = new VertexNode[vlen]; for (int i = 0; i < vlen; i++) { vertexNodeList[i] = new VertexNode(); vertexNodeList[i].vertex = vexs[i]; vertexNodeList[i].firstedge = null; } // 初始化边,利用头插法建立邻接表 for (int i = 0; i < elen; i++) { EdgeNode edgeNode = new EdgeNode(); int vi = getPosition(edges[i][0], vexs); int vj = getPosition(edges[i][1], vexs); edgeNode.adjvex = edges[i][1]; edgeNode.next = vertexNodeList[vi].firstedge; vertexNodeList[vi].firstedge = edgeNode; } } /** * 顶点表结点 */ private class VertexNode { char vertex; // 顶点域,存储顶点信息 EdgeNode firstedge; // 边表头指针 } /** * 边表结点 */ private class EdgeNode { char adjvex; // 邻接点域,存储该顶点对应的下标 EdgeNode next; // 链域,指向下一个邻接点 } /** * 返回ch位置 */ private int getPosition(char ch, char[] vexs) { for (int i = 0; i < vlen; i++) if (vexs[i] == ch) return i; return -1; } /** * 打印邻接表 */ public void print() { System.out.printf("AdjList:\n"); for (int i = 0; i < vlen; i++) { System.out.print(vertexNodeList[i].vertex + "-->"); if (vertexNodeList[i].firstedge != null) { EdgeNode mEdgeNode = new EdgeNode(); mEdgeNode = vertexNodeList[i].firstedge; System.out.print(mEdgeNode.adjvex); while (mEdgeNode.next != null) { mEdgeNode = mEdgeNode.next; System.out.print(mEdgeNode.adjvex); } System.out.print("\n"); } else { System.out.print("\n"); } } } /** * 主函数 * @param args */ public static void main(String args[]) { // 顶点数组 char[] vexs = { 'A', 'B', 'C', 'D' }; // 边数组 char[][] edges = new char[][] { { 'A', 'B' }, { 'A', 'C' }, { 'A', 'D' }, { 'B', 'D' }, { 'C', 'D' } }; ListDG listDG = new ListDG(vexs, edges); listDG.print(); }}代码输出结果:
AdjList:A-->DCBB-->DC-->DD-->
0 0
- 邻接表(Java)
- 图的邻接表实现(Java)
- Java版邻接表
- 邻接表图java实现
- java建邻接链表
- 邻接表(转)
- 图(邻接表)
- 邻接表(模板)
- 哪位大侠帮帮忙啊(java邻接表的初始化)
- java数据结构之图(邻接矩阵和邻接表)
- 邻接表与逆邻接表(数组实现)
- 图(邻接矩阵->邻接表:邻接表->邻接矩阵)
- 邻接表中判边(邻接表+无向图)
- 创建邻接表(AdjacencyList)
- hdu2680(邻接表+dij)
- (ljb.h)邻接表
- 数据结构---图(邻接表)
- 邻接表(简单模拟)
- Java第一次作业参考代码
- SharePoint 2013 指定位置增加路径导航(JQuery)
- Mysql命令大全
- 解决方案-Genymotion 首次安装登陆时出现generic unknown error
- cocos2dx 物理按键
- 邻接表(Java)
- 多态的实现:http://bbs.csdn.net/topics/370166353
- NGUI DrawCall优化
- HDFS源码分析心跳汇报之整体结构
- CodeForces-630 J. Divisibility
- 绘制直方图
- js图片库(无缝循环切换,左右移动效果)
- iOS 开源项目介绍之网络篇
- hdu3709Balanced Number【数位dp】