Conversão entre matrizes esparsas e comprimidas

insira a descrição da imagem aqui
**

código mostrar como abaixo:

**

package com.lijiaming.www;

/**
 * @基本功能:矩阵转换练习
 * @ClassName: Demo01
 * @Description: TODO
 * @Author: lijiaming
 * @Date: 2022/1/10 8:53
 * @Version 1.0
 */
public class Demo01 {
    
    

    public static void main(String[] args) {
    
    
        Demo01 demo01 = new Demo01();
        int[][] array = demo01.init();//初始化二维数组(稀疏矩阵)
        int[][] array2 = demo01.transferV(array);//稀疏矩阵压缩
        demo01.print(array2);//打印压缩矩阵
        int[][] array3 = demo01.transferM(array2);
        demo01.print(array3);

    }
    /**
    * @Method: init
    * @函数(方法)功能: 初始化稀疏矩阵
    * @Author: lijiaming
    * @param
    * @Return: int[][]
    * @Exception:
    * @Date: 2022/1/10 10:57
    */
    public int[][] init() {
    
    
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;
        array1[3][4] = 3;
        array1[4][5] = 4;
        return array1;
    }
    /**
    * @Method: print
    * @函数(方法)功能: 打印矩阵
    * @Author: lijiaming
    * @param array
    * @Return: void
    * @Exception:
    * @Date: 2022/1/10 10:58
    */
    public void print(int[][] array) {
    
    
        for (int[] ints : array) {
    
     //增强for循环
            for (int anInt : ints) {
    
    
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }
    }

    /***
     * @Method: transferV
     * @函数(方法)功能: 稀疏矩阵--->压缩矩阵
     * 1、统计系数矩阵的数值个数
     * 2、压缩后的矩阵行数等于有效数值个数+1
     * 3、列数都为3
     * @Author: lijiaming
     * @param array
     * @Return: int[][]
     * @Exception:
     * @Date: 2022/1/10 10:13
     */
    public int[][] transferV(int[][] array) {
    
    
        //1、统计系数矩阵的数值个数
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
    
    
            for (int j = 0; j < array[i].length; j++) {
    
    
                if (array[i][j] != 0) {
    
    
                    sum++;
                }
            }
        }
        //2、定义压缩矩阵
        int[][] array2 = new int[sum + 1][3];
        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;
        //3、转换
        int count = 0;//为了计数
        for (int i = 0; i < array.length; i++) {
    
    
            for (int j = 0; j < array[i].length; j++) {
    
    
                if (array[i][j] != 0) {
    
    
                    count++;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array[i][j];
                }
            }
        }
        return array2;
    }

    /**
     * @param array
     * @Method: transferM
     * @函数(方法)功能:压缩矩阵-->稀疏矩阵
     * 1、定义稀疏矩阵
     * 2、赋值
     * @Author: lijiaming
     * @Return: int[][]
     * @Exception:
     * @Date: 2022/1/10 10:48
     */
    public int[][] transferM(int[][] array) {
    
    
        //定义稀疏矩阵,稀疏矩阵的行数为压缩矩阵第一行第1列的值,列数为压缩矩阵第一行第2列的值
        int[][] array3 = new int[array[0][0]][array[0][1]];
        //遍历压缩矩阵
        for (int i = 1; i < array.length; i++) {
    
    
            array3[array[i][0]][array[i][1]] = array[i][2];
        }
        return array3;
    }
}

Acho que você gosta

Origin blog.csdn.net/weixin_43605266/article/details/122406104
Recomendado
Clasificación