zoukankan      html  css  js  c++  java
  • Java图的邻接矩阵实现

    /**
     * 
     * 图的邻接矩阵实现
     * @author John
     *
     * @param <T>
     */
    class AMWGraph<T> {
        private ArrayList<T> vertexList;//存储点的链表
        private int[][] edges;//邻接矩阵,用来存储边
        private int numOfEdges;//边的数目
    
        public AMWGraph(int n) {
            //初始化矩阵,一维数组,和边的数目
            edges=new int[n][n];
            vertexList=new ArrayList<T>(n);
            numOfEdges=0;
        }
    
        //得到结点的个数
        public int getNumOfVertex() {
            return vertexList.size();
        }
    
        //得到边的数目
        public int getNumOfEdges() {
            return numOfEdges;
        }
    
        //返回结点i的数据
        public Object getValueByIndex(int i) {
            return vertexList.get(i);
        }
    
        //返回v1,v2的权值
        public int getWeight(int v1,int v2) {
            return edges[v1][v2];
        }
    
        //插入结点
        public void insertVertex(T vertex) {
            vertexList.add(vertexList.size(),vertex);
        }
    
        //插入结点
        public void insertEdge(int v1,int v2,int weight) {
            edges[v1][v2]=weight;
            numOfEdges++;
        }
    
        //删除结点
        public void deleteEdge(int v1,int v2) {
            edges[v1][v2]=0;
            numOfEdges--;
        }
    
        //得到第一个邻接结点的下标
        public int getFirstNeighbor(int index) {
            for(int j=0;j<vertexList.size();j++) {
                if (edges[index][j]>0) {
                    return j;
                }
            }
            return -1;
        }
    
        //根据前一个邻接结点的下标来取得下一个邻接结点
        public int getNextNeighbor(int v1,int v2) {
            for (int j=v2+1;j<vertexList.size();j++) {
                if (edges[v1][j]>0) {
                    return j;
                }
            }
            return -1;
        }
    }
  • 相关阅读:
    Java基础00-模块36
    Java基础00-反射35
    Java基础00-Stream流34
    Java基础00-函数式接口33
    Java基础00-方法引用32
    运用龙格库塔法解大雷洛数平板绕流问题
    LB 学习日记
    Numba学习日记 —— 2019-12-5
    文件的操作及相关异常的处理
    time模块的两个函数time.clock()和time.time()的区别
  • 原文地址:https://www.cnblogs.com/SaraMoring/p/5794389.html
Copyright © 2011-2022 走看看