稀疏数组

1 篇文章 0 订阅

对于一个棋盘的存档,即可作为二维数组的存储,1为白子,2为黑子,空子为0,。当落子数小于空子数,按原始二维数组存储会浪费存储空间,于是有了稀疏数组的概念。

假设有个11*11的棋盘,上面有两个落子1和2

棋盘

转换稀疏数组

第一行固定存储行数,列数,落子总数,然后遍历棋盘,将有落子的行,列,值存储

  如棋盘上的第二行,第三列1,记为1【行下标】,2【列下标】,1【值】。于是有了如下的稀疏数组

   

public class SparseArray {
    public static void main(String[] args) {
        //初始化棋盘
        int[][] chessArr = new int[11][11];
        chessArr[1][2] = 1;
        chessArr[2][3] = 2;
        for(int[] row : chessArr){
            for(int data : row){
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        //稀疏数组初始化并将棋盘值存储
        int[][] sparseArr = new int[3][3];
        sparseArr[0][0] = 11;
        sparseArr[0][1] = 11;
        sparseArr[0][2] = 2;
        int count = 1;
        for(int row = 0; row < chessArr.length; row++){
            for(int col = 0; col < chessArr[0].length; col++){
                if(chessArr[row][col] != 0){
                    sparseArr[count][0] = row;
                    sparseArr[count][1] = col;
                    sparseArr[count][2] = chessArr[row][col];
                    count++;
                }
            }
        }
        System.out.println("*******************ParseToSparseArray********************");
        for(int[] row : sparseArr){
            for(int data : row){
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        //将稀疏数组恢复
        System.out.println("*******************ParseToChessArray********************");
        int[][] chessTwo = new int[sparseArr[0][0]][sparseArr[0][1]];
        for(int row = 1; row < sparseArr.length; row++){
            chessTwo[sparseArr[row][0]][sparseArr[row][1]] = sparseArr[row][2];
        }
        for(int[] row : chessTwo){
            for(int data : row){
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }
    }
}

执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值