您当前的位置: 首页 >  Java

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java数据结构和算法——图的创建

小志的博客 发布时间:2020-10-29 22:04:33 ,浏览量:0

一、示例要求

代码实现如下图结构 在这里插入图片描述

二、代码实现示例

1、创建图的类

package com.rf.springboot01.dataStructure.graph;

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

/**
 * @description: 定义一个图 类
 * @author: xiaozhi
 * @create: 2020-10-27 21:58
 */
public class Graph {
    private ArrayList vertexList;//存储顶点集合
    private int[][] edges;//存储图所对应的邻接矩阵
    private int numEdges;//表示边的数量

    //构造方法 n表示有多少个顶点
    public Graph(int n){
        //初始化
        vertexList=new ArrayList(n);
        edges =new int[n][n];
        numEdges=0;
    }

    /**
    * @Description:  新增节点方法
    * @Param: vertex 节点
    * @Author: xz
    * @Date: 2020/10/27 22:02
    */
    public void insertVertex(String vertex){
        vertexList.add(vertex);
    }

    /** 
    * @Description:  新增边的方法
    * @Param: v1 表示点对应的的下标,即第几个顶点 ,比如 A — B, 点A的下标为0,点B的下标为1
    *         v2,表示第二个顶点对应的下标
    * @Author: xz  
    * @return: void
    * @Date: 2020/10/27 22:02
    */ 
    public void insertEdge(int v1 ,int v2 ,int weight) {
            edges[v1][v2] =weight;
            edges[v2][v1]=weight;
            numEdges++;
    }
    
    /** 
    * @Description: 返回结点个数的方法
    * @Author: xz
    * @Date: 2020/10/27 22:25
    */
    public int getNumVertex(){
        return vertexList.size();
    }
    
    /** 
    * @Description: 返回边的数量方法
    * @Author: xz
    * @Date: 2020/10/27 22:26
    */
    public int getNumEdge(){
        return numEdges;
    }

    /** 
    * @Description: 返回节点i(下标)对应的数据  0->"A" 1->"B" 2->"C"
    * @Author: xz
    * @Date: 2020/10/27 22:31
    */
    public String getValueByIndex(int i){
        return vertexList.get(i);
    }

    /**
    * @Description: 返回v1和v2的权值
    * v1 表示点对应的的下标
    * v2 表示第二个顶点对应的下标
    * @Author: xz
    * @Date: 2020/10/27 22:34
    */
    public int getWeight(int v1, int v2) {
        return edges[v1][v2];
    }
    
    /** 
    * @Description: 显示图对应的矩阵
    * @Author: xz
    * @Date: 2020/10/27 22:44
    */
    public void showGraph(){
        for(int[] link : edges) {
            System.err.println(Arrays.toString(link));
        }
    }

}

2、创建图的测试类

package com.rf.springboot01.dataStructure.graph;

/**
 * @description: 创建图的测试类
 * @author: xiaozhi
 * @create: 2020-10-27 22:48
 */
public class GraphTest {
    public static void main(String[] args) {
        int n =5;//节点个数
        String vertexs[] ={"A","B","C","D","E"};//定义5个节点
        //1、创建图对象
        Graph graph = new Graph(n);
        //2、循环添加顶点
        for(String vertex : vertexs){
            graph.insertVertex(vertex);
        }
        //3、添加边 A-B A-C B-C B-D B-E
        graph.insertEdge(0, 1, 1);//A-B
        graph.insertEdge(0, 2, 1); //A-C
		graph.insertEdge(1, 2, 1); //B-C
	    graph.insertEdge(1, 3, 1); //B-D
		graph.insertEdge(1, 4, 1); //B-E
        //显示邻结矩阵
        graph.showGraph();
    }
}

3、运行测试类,运行结果如下:

在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0414s