Python 每日一记249>>>Java实现图的创建

一、图的基本概念

关于什么是图,为什么要用图,图的要素是什么,创建图的方式,网上的资料很多,就不再多加叙述了,可见下面的视频链接:
图的基本概念及其创建思路
在这里插入图片描述

二、Java代码创建图

这里使用邻接矩阵的方法创建图,简单而言就是创建一个矩阵,这个矩阵的值0,1,分别表示顶点的连通状态,0表示不连通,1表示连通,注意行索引名称和列索引名称是假定的,java二维数组是没有行列名称索引的,只有数字索引,从0开始,如AB表示的点的索引为(0,1),其值为1,表示连通。
在这里插入图片描述

/**
 * nodelist节点集合装节点,如A,B,C----,matrix矩阵表示边,numedge边的数量
 * 主要代码是矩阵的创建,也就是添加边的部分
 */

package mypackage;

import java.util.ArrayList;
import java.util.Arrays;

class Graph { 
//    成员变量,nodelist节点集合,如A,B,C----,matrix矩阵,numedge边的数量
    public ArrayList<String> nodelist;
    public int[][] matrix;
    public int numedge;

//    构造方法,传入节点个数
//    初始化边为0,初始化矩阵大小为nn,初始化集合大小为n
    public Graph(int n) {
        this.numedge = 0;
        matrix = new int[n][n];
        nodelist = new ArrayList<>(n);
    }

    //    插入节点
    public void insertnode(String node) {
        nodelist.add(node);
    }

//    添加边
//    先在矩阵中表示交叉处的值,再将边的数量+1
//    v1,v2是索引,value是0或者1
    public void insertedge(int v1, int v2, int value) {
        matrix[v1][v2] = value;
//        因为是双向的,所以还要matrix[v2][v1]=value;
        matrix[v2][v1] = value;
        numedge++;
    }

//    返回节点个数
    public int getNumnode(){
        return nodelist.size();
    }
//    返回边的数量
    public int getNumedge(){
        return numedge;
    }

//    返回节点i对应的数据
    public String getnode(int i){
        return nodelist.get(i);
    }

//    返回v1,v2对应的value
    public int getvalue(int v1,int v2){
        return matrix[v1][v2];
    }

//    显示图
//    循环打印一维数组即可
    public void showgraph(){
        for (int[] arr:matrix) {
            System.out.println(Arrays.toString(arr));
        }
    }

}


//测试
public class MyJava {

    public static void main(String[] args) {
//        初始化结点个数
        Graph graph=new Graph(5);
//        添加节点
        graph.insertnode("A");
        graph.insertnode("B");
        graph.insertnode("C");
        graph.insertnode("D");
        graph.insertnode("E");
//        添加边
//        连接关系为A-B,A-C,B-D,B-E,注意是双向的
//        其他的连接都是0
        graph.insertedge(0,1,1);
        graph.insertedge(0,2,1);
        graph.insertedge(1,2,1);
        graph.insertedge(1,3,1);
        graph.insertedge(1,4,1);

//        显示图
        System.out.println("图矩阵如下:");
        graph.showgraph();
//        返回节点的个数
        System.out.println("节点个数:"+graph.getNumnode());
//        返回边的个数
        System.out.println("边个数:"+graph.getNumedge());
//        返回节点i对应的数据
        System.out.println("节点集合中索引0处的节点:"+graph.getnode(0));
//        返回v1,v2对应的value
        System.out.println("矩阵中,索引(1,0)处的值:"+graph.getvalue(1,0));
    }
}

结果:
在这里插入图片描述

发布了235 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_44663675/article/details/105724439
今日推荐