package Day01; /** * 二维数组转换为稀疏数组的思路: * * 1.遍历原始的二维数组,得到有效数据的个数sum * * 2.根据sum就可以创建稀疏数组sparseArr int[sum+1] [3] * * 3.将二维数组的有效数据存到稀疏数组 * * 稀疏数组转换为原始的二维数组的思路: * * 1.先读取稀疏数组的第一行,根据第一行的数据创建原始二维数组 * * 2.读取稀疏数组后几行的数据,并赋给原始的二维数组 */ public class SparseArray { public static void main(String[] args) { // 五子棋谱: // 创建一个11*11的二维数组:0:表示没有棋子,1:表示黑子,2:表示蓝子 int[][] arr = new int[11][11]; arr[1][2] = 1; arr[2][3] = 2; System.out.println("原始二维数组!!!"); for (int i = 0;i < arr.length;i++){ for(int j = 0;j < arr[i].length;j++){ System.out.print(arr[i][j] + "\t"); } System.out.println(); } //1.遍历数组,得到非零元素个数 int sum = 0; for(int[] ls : arr){ for(int i : ls){ if(i != 0)sum++; } } //2.创建稀疏数组 int[][] sparseArray = new int[sum+1][3]; //3.给稀疏数组赋值 sparseArray[0][0] = 11; sparseArray[0][1] = 11; sparseArray[0][2] = sum; // int count = 0;//用于记录第几个非0数据 for (int i = 0;i < arr.length;i++){ for(int j = 0;j < arr[i].length;j++){ if(arr[i][j] != 0){ count++; sparseArray[count][0] = i;//行 sparseArray[count][1] = j;//列 sparseArray[count][2] = arr[i][j]; } } } //遍历稀疏数组 System.out.println("得到的稀疏数组!!1"); for(int i = 0;i < sparseArray.length;i++){ System.out.printf("%d\t%d\t%d\t\n",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]); } //将稀疏数组恢复称二维数组 System.out.println("原始数组!!!"); //创建一个二维数组 int[][] ls = new int[sparseArray[0][0]][sparseArray[0][1]]; //读取稀疏数组,并把值赋给二维数组 for(int i = 1;i < sparseArray.length;i++){ for(int j = 1;j < sparseArray.length;j++){ ls[sparseArray[j][0]][sparseArray[j][1]] = sparseArray[j][2]; } } //遍历原始二维数组 for(int[] src : ls){ for(int i : src){ System.out.printf("%d\t",i); } System.out.println(); } } }