稀疏数组

suaxi
2020-11-16 / 0 评论 / 74 阅读 / 正在检测是否收录...
package com.example.demo.Array;

/**
 * @Description 稀疏数组
 * @Author suaxi
 * @Date 2021/8/17 14:43
 */
public class SparseArrayDemo {
    public static void main(String[] args) {
        //1.创建一个二维数组 11*11 0:没有棋子 1:白棋 2:黑棋
        int[][] a = new int[11][11];
        a[1][2] = 1;
        a[2][3] = 2;
        //输出原始数组
        System.out.println("原始数组:");
        for (int[] ints : a) {
            for (int anInt : ints) {
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }
        System.out.println("===========================分割线=================================");

        //2.转换为稀疏数组
        //获取有效值的个数
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != 0) {
                    sum++;
                }
            }
        }
        System.out.println("有效值的个数:" + sum);
        System.out.println("===========================分割线=================================");

        //创建一个稀疏数组的数组
        int[][] b = new int[sum + 1][3];
        b[0][0] = a.length;
        b[0][1] = a.length;
        b[0][2] = sum;

        //遍历二维数组,将非零值存入稀疏数组
        //记录行数
        int count = 0;
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j] != 0) {
                    count++;
                    //第几行的第一个数字存横坐标
                    b[count][0] = i;
                    //第几行的第二个数字存纵坐标
                    b[count][1] = j;
                    //第几行的第三个数字存具体的值
                    b[count][2] = a[i][j];
                }
            }
        }
        System.out.println("稀疏数组:");
        for (int i = 0; i < b.length; i++) {
            System.out.println(b[i][0] + "\t"
                    + b[i][1] + "\t"
                    + b[i][2] + "\t"
            );
        }
        System.out.println("===========================分割线=================================");

        //还原稀疏数组
        System.out.println("还原");
        //1.读取稀疏数组
        int[][] c = new int[b[0][0]][b[0][1]];

        //2.将其中的元素还原为对应的值
        for (int i = 1; i < b.length; i++) {
            c[b[i][0]][b[i][1]] = b[i][2];
        }

        //3.打印
        for (int[] ints : c) {
            for (int anInt : ints) {
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }
    }
}

稀疏数组.png

0

评论 (0)

取消