邻接链表与图及其相关操作--Java
来源:互联网 发布:淘宝买鹿王羊绒衫 编辑:程序博客网 时间:2024/06/02 03:43
找了好久的关于图的邻接链表存储结构,这个是最满意的。一来方便自己以后查找使用,二来分享给大家。
package Graph;import java.util.ArrayList;import java.util.List;/** * 邻接表实现的图 * @author ctk * */public class ListGraph { private List<GraphNode> gNodes ;//头结点链表 private int vertex ;//图的结点数目 private int edges ;//边数目 public ListGraph(int vertex){//构造方法 this.vertex = vertex ; gNodes = new ArrayList<>(vertex);//给头结点链表分配内存空间 for(int i=0;i<vertex;i++) { GraphNode gnode = new GraphNode(); gnode.setNodeIndex(i); gnode.setNext(null); gNodes.add(gnode); } } public void addEdge(int i,int j,int weight){//添加边 if(i >= vertex || j >= vertex || i < 0 || j < 0) { System.out.println("输入的i和j超过范围"); return; } GraphNode gnode = gNodes.get(i); boolean isAlter = false; while(gnode.getNext() != null) { if(gnode.getNodeIndex() == j) { gnode.setData(weight); isAlter = true; break; } gnode = gnode.getNext(); } if(i == j){ gnode.setData(weight); isAlter = true; } if(!isAlter){ GraphNode edgeNode = new GraphNode(); edgeNode.setData(weight); edgeNode.setNodeIndex(j); edgeNode.setNext(null); gnode.setNext(edgeNode); } } public int[][] getMartix(){//生成邻接矩阵,图以邻接矩阵的形式返回 int[][] martix = new int[vertex][vertex]; GraphNode temp = null; for(int i=0;i<gNodes.size();i++){ temp = gNodes.get(i); while(temp != null){ martix[i][temp.getNodeIndex()] = temp.getData(); temp = temp.getNext(); } } return martix; } public int getEdge(int i,int j){ //获得某边,获取某个边的权重 int weight = 0; if(i >= vertex || j >= vertex || i < 0 || j < 0) { System.out.println("输入的i和j超过范围"); return weight; } GraphNode temp = gNodes.get(i); while(temp != null){ if(temp.getNodeIndex() == j){ weight = temp.getData(); break; } temp = temp.getNext(); } return weight; } public int getVertex() {//获取全图的顶点数 return vertex; } public int getEdges() {//返回全图的边数 return edges; } public static void main(String[] args) { ListGraph graph = new ListGraph(5); graph.addEdge(0, 1, 2); graph.addEdge(0, 2, 3); graph.addEdge(1, 1, 4); graph.addEdge(2, 3, 6); int[][] martix = graph.getMartix(); for(int i =0;i<martix.length;i++){ for(int j=0;j<martix[i].length;j++) System.out.print(martix[i][j]+" "); System.out.println(); } System.out.println("获取边<1,1> :"+graph.getEdge(1, 1)); }}class GraphNode{//节点类 private int nodeIndex;//结点标号 private int data;//结点数据 private GraphNode next;//结点指针 public int getNodeIndex() {//返回顶点标号 return nodeIndex; } public void setNodeIndex(int nodeIndex) {//设置顶点标号 this.nodeIndex = nodeIndex; } public int getData() {//返回结点数据 return data; } public void setData(int data) {//设置结点数据 this.data = data; } public GraphNode getNext() {//获取该结点指向的下一个结点 return next; } public void setNext(GraphNode next) {//设置该结点指向的下一个结点 this.next = next; }}
借花献佛了。
0 0
- 邻接链表与图及其相关操作--Java
- java实现链表及其相关操作
- 图的邻接表存储以及相关操作 C语言
- 邻接表与图
- 图的邻接表存储及其实现
- 图的邻接表操作
- C++邻接表图操作
- java建邻接链表
- 邻接表图java实现
- 块状链表基本操作及其相关例题
- java 链表相关操作
- 【总结】邻接表 图的基本操作
- 图的邻接表的操作实现
- 邻接表对图常用的操作
- 图的邻接表基本操作
- 图的基本操作(基于邻接表
- 图的邻接表储存及其遍历[数据结构学习]
- 图的邻接表存储结构的定义及其遍历
- JUnit初学
- 学生信息的添加与查询(java集合框架应用)
- bzoj1145: [CTSC2008]图腾totem
- MFC错误记录-error C2501
- The Begining
- 邻接链表与图及其相关操作--Java
- 微服务指南走北(四):你不愿意做微服务架构的十个理由
- php中类之间继承关系
- c++实现解析文件路径
- 动态规划总结
- rootViewController获取真的如你想的那么简单吗
- Tomcat 8005、8009和8080端口
- Leetcode——Array 2
- SpringMVC学习系列(8) 之 国际化