java实现数据结构图g(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;
    }
}

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值