当前位置:   article > 正文

java实现数据结构图g(graph)的创建_pakage graph

pakage graph

java实现数据结构图g(graph)的创建,以以下图片中图为例(来自于大话数据结构):
这里写图片描述
顶点数是5,定义无穷大为MAX用以较大整数代替;创建图的代码和思路如下所示:

package graph;//自己代码定义的包名

import java.util.Scanner;//代码中使用了Scanner类

class Graph{
    //定义一下的属性变量
    private int vertexSize;//顶点数量,虽然是私有的,但是可以用set get方法进行设置
    //问题1.eclipse提醒未使用vertexSize,原因是什么?

    private int [] vertex;//定义顶点数组
    private int [] [] matrix;//定义邻接矩阵,是一个二维数组
    private static final int MAX=50;//设置最大权重50代表无穷大,常量  因为是静态私有的常量,只能在本类中有效

    //图类的构造函数
    public Graph(int vertexSize){
        this.vertexSize = vertexSize;//接收传来的顶点数   在邻接矩阵的定义处可以知道,传的数是5
        matrix=new int [vertexSize] [vertexSize];//邻接绝阵是方阵,行列是定点数   
        //创建顶点数组,其实就是用顶点个数定义顶点数组,最终定点数组的内容是0,1,2,3,4
        vertex=new int [vertexSize];
        for(int i=0;i<vertexSize;i++){
            vertex[i]=i;
        }
    }

    //创建vertex的set get方法   快捷键: alt+shift+s
    public int[] getVertex() {
        return vertex;
    }

    public void setVertex(int[] vertex) {
        this.vertex = vertex;//可以调用图的这个方法设置图的顶点数组
    }

    //---主函数部分
    public static void main(String[] args) {
        Graph graph = new Graph(5);//创建一个真正的图,顶点数是5,并输入邻接矩阵具体值
        //这里的5难道不是在使用vertexSize吗?
        int [] a1=new int[]{0,MAX,MAX,MAX,6};
        int [] a2=new int[]{9,0,3,MAX,MAX};
        int [] a3=new int[]{2,MAX,0,5,MAX};
        int [] a4=new int[]{0,MAX,MAX,0,1};
        int [] a5=new int[]{0,MAX,MAX,MAX,0};//创建5个一维数组

        //将每行的数据赋值给图的邻接矩阵,邻接矩阵每行就是一个数组
        graph.matrix[0]=a1;
        graph.matrix[1]=a2;
        graph.matrix[2]=a3;
        graph.matrix[3]=a4;
        graph.matrix[4]=a5;//到此邻接矩阵创建完成

        //---使用输入的方式查询项要看的顶点,应该还加上判断顶点是否超出范围 
        System.out.println("输入你想查看的顶点:");
        Scanner sc =new Scanner(System.in );
        int mm=0;
        if(sc.hasNext())
            mm=sc.nextInt();
        int num = graph.getOutDegree(mm);
        System.out.println("顶点"+mm+"的出度是:"+num);
        sc.close();
    }

    //测试1:获取某个顶点的出度,即是邻接矩阵中这个顶点对应的行中大于0小于无穷大的数字
    public int getOutDegree(int index){
        int degree=0;//初始化出度为0
        for(int j=0;j<matrix[index].length;j++){
            if(matrix[index][j]>0 & matrix[index][j]<MAX)
                degree++;
        }
        return degree;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

代码验证没问题!
运行根据提示输入0~4查寻顶点的出度,可以考虑加入判断顶点是否存在的语句,比如输入5则报错,表示没有这个顶点

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号