数据结构与算法——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 + "\t"); 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("行数\t列数\t值"); 54 for (int[] ints : sparseArray) { 55 for (int anInt : ints) { 56 System.out.print(anInt + "\t\t"); 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 + "\t"); 73 } 74 System.out.println(); 75 } 76 } 77 }