JAVA稀疏数组

应用案例

稀疏数组转换思路分析

代码:

public class test {
    public static void main(String[] args)
    {
        //稀疏数组
        //1、先创建一个二维数组      11*11
        //0表示没有棋子,1表示黑子,2表示蓝子
        int chessArray1[][] = new int[11][11];
        chessArray1[1][2] = 1;
        chessArray1[2][3] = 2;
        //输出原始的二维数组
        System.out.println("原始的稀疏数组");
        for(int i = 0;i < chessArray1.length;i++)
        {
            for(int j = 0;j < chessArray1[i].length;j++)
            {
                System.out.print(" "+chessArray1[i][j]);
            }
            System.out.println();
        }
        //将二维数组转换为稀疏数组
        //1.首先遍历二维数组,找到有效数字
        int sum = 0;
        for(int i = 0;i < chessArray1.length;i++)
        {
            for(int j = 0;j < chessArray1[i].length;j++)
            {
                if(chessArray1[i][j] != 0)
                    sum++;
            }
        }
        System.out.print("有效数字的个数:");
        System.out.println(sum);//输出有效数字的个数
        //2.创建对应的稀疏数组
        int sparseArr[][] = new int[sum+1][3];
        //给稀疏数组赋值
        sparseArr[0][0] = 11;
        sparseArr[0][1] = 11;
        sparseArr[0][2] = sum;
        //遍历二维数组将非0的值存入稀疏数组中
        int count = 1;
        for(int i = 0;i < chessArray1.length;i++)
        {
            for(int j = 0;j < chessArray1[i].length;j++)
            {
                if(chessArray1[i][j] != 0)
                {
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArray1[i][j];
                    count++;
                }
            }
        }
        //输出稀疏数组的形式
        System.out.println("输出稀疏数组");
        for(int i = 0;i < sparseArr.length;i++)
        {
            for(int j = 0;j < sparseArr[i].length;j++)
            {
                System.out.print("    "+sparseArr[i][j]);
            }
            System.out.println();
        }
        //将稀疏数组恢复成原来的二维数组
        //1.读取稀疏数组的第一行,根据第一行数据,创建稀疏数组
        int chessArray2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
        //2.把稀疏数组的后几行数据给二维数组
        for(int i = 1;i < sparseArr.length;i++)
        {
            chessArray2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];        
        }
        //3.打印转换之后的二维数组
        System.out.println("转换之后的二维数组");
        for(int i = 0;i < chessArray2.length;i++)
        {
            for(int j = 0;j < chessArray2[i].length;j++)
            {
                System.out.print(" "+chessArray2[i][j]);
            }
            System.out.println();
        }
    }
}

运行结果:

原始的稀疏数组
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
有效数字的个数:2
输出稀疏数组
11 11 2
1 2 1
2 3 2
转换之后的二维数组
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

猜你喜欢

转载自www.cnblogs.com/lintianxiajun/p/12818677.html
今日推荐