package abc.Dijkstra.pack3; import java.util.ArrayList; import java.util.List; public class AlGraph { List<HeadNode> headNodes = new ArrayList<HeadNode>(); void addVertex(HeadNode node) { headNodes.add(node); } void addArc(HeadNode head, HeadNode tail) { if(head.firstArcNode == null) head.firstArcNode = new ArcNode(tail); else { ArcNode arcNode = head.firstArcNode; while (arcNode.nextArcNode != null) { arcNode = arcNode.nextArcNode; } arcNode.nextArcNode = new ArcNode(tail); } } static AlGraph createAlGraph() { AlGraph alGraph = new AlGraph(); HeadNode A = new HeadNode("A"); HeadNode B = new HeadNode("B"); HeadNode C = new HeadNode("C"); HeadNode D = new HeadNode("D"); alGraph.addVertex(A); alGraph.addVertex(B); alGraph.addVertex(C); alGraph.addVertex(D); alGraph.addArc(A, B); alGraph.addArc(A, C); alGraph.addArc(A, D); alGraph.addArc(B, A); alGraph.addArc(B, D); alGraph.addArc(C, A); alGraph.addArc(D, A); alGraph.addArc(D, B); return alGraph; } void print() { for(HeadNode head : headNodes) { System.out.print(head.name); if(head.firstArcNode != null) { ArcNode arcNode = head.firstArcNode; System.out.print(" -> "); System.out.print(arcNode.headNode.name); while (arcNode.nextArcNode != null) { arcNode = arcNode.nextArcNode; System.out.print(" -> "); System.out.print(arcNode.headNode.name); } } System.out.println(); } } public static void main(String[] args) { AlGraph.createAlGraph().print(); } } class ArcNode { public ArcNode(HeadNode tail) { this.headNode = tail; } HeadNode headNode; ArcNode nextArcNode; } class HeadNode { String name; ArcNode firstArcNode; HeadNode(String name) { this.name = name; } }
输出 写道
A -> B -> C -> D
B -> A -> D
C -> A
D -> A -> B
B -> A -> D
C -> A
D -> A -> B
也许实现的时候,可以不区别头结点和表结点。
但是不区分的话,遍历麻烦些。
可以有List代替Link
public class AlGraph3 { List<Node> vertexes = new ArrayList<Node>(); void addVertex(Node vertex) { vertexes.add(vertex); } void addArc(Node head, Node tail) { head.addArc(tail); } static AlGraph3 createAlGraph() { AlGraph3 alGraph = new AlGraph3(); Node A = new Node("A"); Node B = new Node("B"); Node C = new Node("C"); Node D = new Node("D"); alGraph.addVertex(A); alGraph.addVertex(B); alGraph.addVertex(C); alGraph.addVertex(D); alGraph.addArc(A, B); alGraph.addArc(A, C); alGraph.addArc(A, D); alGraph.addArc(B, A); alGraph.addArc(B, D); alGraph.addArc(C, A); alGraph.addArc(D, A); alGraph.addArc(D, B); return alGraph; } void print() { for(Node head : vertexes) { System.out.print(head.name); for(Node arc : head.adjs) { System.out.print(" -> "); System.out.print(arc.name); } System.out.println(); } } public static void main(String[] args) { AlGraph3.createAlGraph().print(); } } class Node { String name; List<Node> adjs = new ArrayList<Node>(); Node(String name) { this.name = name; } void addArc(Node node) { adjs.add(node); } }
相关推荐
(1) 基于邻接表的图的构建功能 (2) 标准Dijkstra算法 (3) 有向图的强连通算法 Environment: Eclipse 3.4 + JDK 1.6 注:目前只实现了以上三个功能,但由于各功能都基于模块化分解的思想实现,所以加入新功能会比较...
图的邻接表实现,用邻接矩阵实现了图,基本操作,主要算法
* 基于邻接边表实现图的顶点结构 */ package dsa; public class Vertex_List implements Vertex { //变量 protected Object info;//当前顶点中存放的数据元素 protected Position vPosInV;//当前顶点在所属的...
第一次制作的网页,关于基于Java实现图论算法的代码。内含一些html的基础操作语法,比如超链接等等。
主要介绍了邻接表无向图的Java语言实现完整源码,具有一定借鉴价值,需要的朋友可以参考下。
NULL 博文链接:https://128kj.iteye.com/blog/1694918
本程序通过java使用邻接表对图进行深度和广度优先遍历,其中包括图和节点的数据结构实现
图的邻接矩阵和邻接表存储形式,并实现深度优先遍历和广度优先遍历
* 基于邻接边表实现图的边结构 */ package dsa; public class Edge_List implements Edge { //变量 protected Object info;//当前边中存放的数据元素 protected Position ePosInE;//当前边在所属的图的边表中...
* 基于邻接边表实现图结构 */ package dsa; public class Graph_List implements Graph { //变量 protected List E;//容器:存放图中所有边 protected List V;//容器:存放图中所有顶点 //构造方法 public ...
* 基于邻接边表实现图结构 */ package dsa; public class Graph_List implements Graph { //变量 protected List E;//容器:存放图中所有边 protected List V;//容器:存放图中所有顶点 //构造方法 public ...
NULL 博文链接:https://128kj.iteye.com/blog/1663043
由JAVA实现的多段图的动态规划算法,采用邻接表数据结构存储
主要介绍了java实现图的邻接表存储结构的两种方式及实例应用详解,邻接表构建图是必须需要一个Graph对象,也就是图对象!该对象包含属性有:顶点数、边数以及图的顶点集合,需要的朋友可以参考下
通过本课程的学习,学员可以掌握以下技术点:线性结构与顺序表、单向链表、循环链表、栈的基本概念、链式堆栈、中缀表达式、队列、链式队列、串、MyString、Brute-Force算法、MySet类实现、矩阵类、递归算法、哈夫曼...
用邻接表和邻接矩阵表示的图的 Java 实现 基于西帕拉联邦大学教授 Efren Lopes de Souza 博士创建的代码 ( )。 对于通过 exportToDotFile(String fileName) 方法生成图形的图形版本的功能,需要在地址下载...
如何用java实现图的存储【邻接矩阵】首先得考虑图的几条重要特性如何表示顶点如何表示边表示图中的边有两种方法,邻接矩阵和邻接表。如何构造邻接矩阵如何把图打印出来看看结果附上代码完结撒花 首先得考虑图的几条...
NULL 博文链接:https://128kj.iteye.com/blog/1745985
数据结构图的邻接矩阵,邻接表存储表示,图的深度优先搜索遍历,广度优先搜索遍历 数据结构图的邻接矩阵,邻接表存储表示,图的深度优先搜索遍历,广度优先搜索遍历.rar
图的数据结构:采用邻接矩阵的存储方式来表示图中顶点之间的关系 使用二维数组来存储图中顶点的关系:数字为0表示自己,最大值表示两个顶点之间不联通, -》求顶点的入度和出度 -》顶点a到顶点b之间的权值 ==...