JAVA-1.稀疏矩阵

12
package Array;

/**
 * 稀疏矩阵
 * 前提:二维数组的很多值都是0或者为同一个值时
 *
 * @author GoodTime0313
 * @version 1.0
 * @date 2021/1/19 20:27
 */
public class Sparsearray_1 {
    public static void main(String[] args) {
        //0:表示没有棋子,1表示黑子 2表示蓝子
        int[][] ints = new int[11][11];
        ints[1][2] = 1;
        ints[2][3] = 2;
        ints[4][5] = 2;
        /*
        1.二维数组转稀疏矩阵
        处理方法:创建n行3列的稀疏矩阵a[n][3],n为有效值+1
                 a[0][0]存储多少行 a[0][1]存储多少列 a[0][2]存储多少个有效值
                 a[n][0]第几行  a[n][1]第几列  a[n][2] 有效值
                 .......
        */
        int count = 0;
        for (int[] anInt : ints) {
            for (int j = 0; j < ints[0].length; j++) {
                if (anInt[j] != 0) {
                    count++;
                }
            }
        }
        int[][] ints1 = new int[count + 1][3];
        ints1[0][0] = ints.length;
        ints1[0][1] = ints[0].length;
        ints1[0][2] = count;

        int k = 1;
        for (int i = 0; i < ints.length; i++) {
            for (int j = 0; j < ints[0].length; j++) {
                if (ints[i][j] != 0) {
                    ints1[k][0] = i;
                    ints1[k][1] = j;
                    ints1[k][2] = ints[i][j];
                    k++;
                }
            }
        }
        System.out.println("二维数组转稀疏矩阵:");
        for (int[] item : ints1) {
            for (int j = 0; j < ints1[0].length; j++) {
                System.out.print(item[j] + " ");
            }
            System.out.println();
        }

        /*2.稀疏矩阵转二维数组
          处理过程:先读取稀疏矩阵第一行 获取行数列数建立二维数组
          再读取稀疏矩阵剩下的行列,对二维数组进行赋值
        */
        System.out.println("稀疏矩阵转二维数组:");
        int[][] ints2 = new int[ints1[0][0]][ints1[0][1]];
        for (int i = 1; i < ints1.length; i++) {
            ints2[ints1[i][0]][ints1[i][1]] = ints1[i][2];
        }
        for (int[] value : ints2) {
            for (int j = 0; j < ints2[0].length; j++) {
                System.out.print(value[j] + " ");
            }
            System.out.println();
        }
    }
}