• 数据结构与算法——1,稀疏数组


     1 package com.xgp.数据结构.非线性结构.稀疏数组.Demo1;
     2 
     3 /**
     4  * 稀疏数组------>棋盘存盘问题
     5  */
     6 public class SparseArray {
     7     public static void main(String[] args) {
     8         //创建一个原始的二维数组 11*11
     9         //0:无 1:黑 2:蓝 色棋子
    10         int[][] chessArray1 = new int[11][11];
    11         chessArray1[1][2] = 1;
    12         chessArray1[2][3] = 2;
    13         System.out.println("原始的二维数组:");
    14         for (int[] row : chessArray1) {
    15             for (int data : row) {
    16                 System.out.print(data + "	");
    17             }
    18             System.out.println();
    19         }
    20 
    21         //将二维数组转稀疏数组
    22         //1,先遍历二维数组,等到非0数据的个数
    23         int sum = 0;
    24         for (int[] ints : chessArray1) {
    25             for (int anInt : ints) {
    26                 if(anInt != 0) {
    27                     sum++;
    28                 }
    29             }
    30         }
    31 //        System.out.println("sum = " + sum);
    32         //2,创建对应的稀疏数组
    33         int[][] sparseArray = new int[sum+1][3];
    34         //给稀疏数组赋值
    35         sparseArray[0][0] = 11;
    36         sparseArray[0][1] = 11;
    37         sparseArray[0][2] = sum;
    38         //遍历二维数组,将非0的值存到稀疏数组中
    39         int count = 0;  //用于记录是第几个非0数据
    40         for (int i = 0;i < 11 ;i++) {
    41             for (int j = 0; j < 11;j++) {
    42                 if(chessArray1[i][j] != 0) {
    43                     count++;
    44                     sparseArray[count][0] = i;
    45                     sparseArray[count][1] = j;
    46                     sparseArray[count][2] = chessArray1[i][j];
    47                 }
    48             }
    49         }
    50 
    51         //输录稀疏数组
    52         System.out.println("得到的稀疏数组为:");
    53         System.out.println("行数	列数	值");
    54         for (int[] ints : sparseArray) {
    55             for (int anInt : ints) {
    56                 System.out.print(anInt + "		");
    57             }
    58             System.out.println();
    59         }
    60 
    61         //将稀疏数组恢复成二维数组
    62         //1,先读取稀疏数组的第一行,根据第一数据,创建原始的二维数组
    63         int[][] chessArray2 = new int[sparseArray[0][0]][sparseArray[0][1]];
    64         //给恢复的二维数组赋值
    65         for(int i = 1;i < sparseArray.length;i++) {
    66             chessArray2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
    67         }
    68 
    69         System.out.println("恢复后的二维数组:");
    70         for (int[] ints : chessArray2) {
    71             for (int anInt : ints) {
    72                 System.out.print(anInt + "	");
    73             }
    74             System.out.println();
    75         }
    76     }
    77 }
  • 相关阅读:
    HDU4112
    HDU1059 二进制拆分优化多重背包
    HDU1087
    HDU1978How Many Ways 记忆化dfs+dp
    HDU1160FatMouse's Speed
    HDU1503Advanced Fruits
    CF337C
    337BRoutine Problem
    【★★★★★模板专区★★★★★】
    【水】Jam计数法
  • 原文地址:https://www.cnblogs.com/xgp123/p/11630335.html
Copyright © 2020-2023  润新知