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则报错,表示没有这个顶点

以下是一个简单的 Java 形用户界面(GUI),它显示了一个数据结构: ```java import javax.swing.*; import java.awt.*; public class GraphGUI extends JFrame { private Graph graph; public GraphGUI(Graph graph) { this.graph = graph; setTitle("Graph"); setPreferredSize(new Dimension(500, 500)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(new GraphPanel()); pack(); setLocationRelativeTo(null); setVisible(true); } private class GraphPanel extends JPanel { protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setStroke(new BasicStroke(2)); for (Vertex v : graph.getVertices()) { int x = v.getX(); int y = v.getY(); g2d.setColor(Color.BLACK); g2d.fillOval(x - 10, y - 10, 20, 20); g2d.setColor(Color.WHITE); g2d.drawString(v.getLabel(), x - 5, y + 5); for (Edge e : v.getEdges()) { Vertex w = e.getVertex2(); int x2 = w.getX(); int y2 = w.getY(); g2d.setColor(Color.BLUE); g2d.drawLine(x, y, x2, y2); } } } } } ``` 这个 GUI 显示了一个数据结构,其中顶点由黑色圆圈表示,并在圆圈中心显示标签。边由蓝色线段表示。在此示例中,我们假设数据结构由 `Graph` 类表示,其中每个顶点由 `Vertex` 类表示,每个边由 `Edge` 类表示。在 `GraphGUI` 构造函数中,我们将 `Graph` 对象作为参数传递,并将其存储在实例变量 `graph` 中。然后我们创建一个 `GraphPanel` 对象,并将其添加到 `JFrame` 中。在 `GraphPanel` 中,我们使用 `Graphics2D` 对象绘制形。对于每个顶点,我们绘制一个黑色圆圈,并在圆圈中心显示标签。对于每个边,我们绘制一条蓝色线段,连接边的两个顶点。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值