数据结构(一)---稀疏矩阵

数据结构(一)---稀疏矩阵

public class SparseArray {
    public static void main(String[] args) {
        //创建一个二维数组11*11
        //0代表没有棋子,1表示黑子,2表示蓝子
        int chessArray01[][]=new int[11][11];
        chessArray01[1][2]=1;
        chessArray01[2][3]=2;
        chessArray01[3][3]=2;
        //输出原始的二维数组
        for (int[] row : chessArray01) {
            for (int data : row) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }


        /**把二维数组转成稀疏数组
         * @Date: 2019/10/29 0:08
         */
        //1-先遍历二维数组,得到非0数据的个数
        int sum=0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArray01[i][j]!=0){
                    sum++;//统计二维数组中值不为0的个数
                }
            }
        }
        System.out.println("数组中不为0的值个数sum="+sum);

        //2-创建对应的稀疏数组
        //了解稀疏矩阵之后,就知道固定为3列,行数为sum+1,因为第一行是参数栏,初始化稀疏矩阵如下
        int sparseArray[][]=new int[sum+1][3];
        sparseArray[0][0]=11;
        sparseArray[0][1]=11;
        sparseArray[0][2]=sum;

        //遍历二维数组里不为0的值,再把这个值放进稀疏数组
        int count=0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArray01[i][j]!=0){
                    //第一个非0值,放在第二行,索引为1
                    //第二个非0值,放在第三行,索引为2
                    //第三个非0值,放在第四行,索引为3
                    //第count个非0值,放在第count+1行,索引为count
                    //所以需要一个计数器,记录到第几个非0值了
                    count++;
                    sparseArray[count][0]=i;
                    sparseArray[count][1]=j;
                    sparseArray[count][2]=chessArray01[i][j];
                }
            }
        }

        //3-输出稀疏矩阵
        System.out.println("得到稀疏矩阵,如下:");
        for (int[] row : sparseArray) {
            for (int data : row) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }


        //总结
        //首先,你要了解稀疏矩阵的结构,才能只能怎么把遍历出来的数据放进稀疏矩阵



        /**把稀疏数组转换成原始的二维数组
         * 1-先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组(第一行包含了二位数组的基本信息)
         * 2-在读取稀疏矩阵数组后几行的数据,并赋给二维数组
         *
         * @Date: 2019/10/28 23:42
         */

        //1-先知道二维数组一共有几行几列
        int rowSum=sparseArray[0][0];//二维数组的行数
        int lieSum=sparseArray[0][1];//二维数组的列数
        int numSum=sparseArray[0][2];//二维数组一共有几个值不为0
        //创建二维数组(已知行数和列数)
        int chessArray02[][]=new int[rowSum][lieSum];

        //2-遍历稀疏数组里的值,然后放到二维数组里
        int rowNum=0;
        int lieNum=0;
        for (int i = 1; i < numSum+1; i++) {
                rowNum=sparseArray[i][0];//稀疏数组值在二维数组里的行数
                lieNum=sparseArray[i][1];//稀疏数组值在二维数组里的列数
                chessArray02[rowNum][lieNum]=sparseArray[i][2];//稀疏数组值放到二维数组里去
        }

        //3-遍历输出二维数组
        System.out.println("根据稀疏矩阵得到的二维数组,如下:");
        for (int[] row : chessArray02) {
            for (int data : row) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }

    }
}
发布了41 篇原创文章 · 获赞 5 · 访问量 657

猜你喜欢

转载自blog.csdn.net/weixin_44823875/article/details/104930830
今日推荐