稀疏数组的处理方法:
1)记录数组一共有几行几列,有多少个不同的值
2)把具有不同值得元素的行列及值记录在一个小规模(小规模的就是稀疏数组)的数组中,从而缩小程序的规模
package com.chengliang.sparsearray;
import java.util.ArrayList;
public class SparseArray {
public static void main(String[] args) {
//创建原始的二维数组 11 * 11
//0表示没有棋子,1表示黑子,2表示蓝子
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
chessArr1[3][5] = 2;
for(int[] row : chessArr1) {
for(int data : row) {
//System.out.printf("%d\t", data);
}
//System.out.println();
}
//将二维数组 转 稀疏数组
//1. 先遍历二维数组 得到非0数据的个数
int sum = 0;
int row = chessArr1.length;
int col = chessArr1[0].length;
for (int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
if (chessArr1[i][j] > 0) {
sum++;
}
}
}
//2.创建对应的稀疏数组
int sparseArray[][] = new int[sum+1][3];
// 给稀疏数组赋值
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
int number = 1;
// 遍历二维数组,将非0的值存放到 sparseArray中
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (chessArr1[i][j] > 0) {
sparseArray[number][0] = i;
sparseArray[number][1] = j;
sparseArray[number][2] = chessArr1[i][j];
number++;
}
}
}
for (int i = 0; i < sparseArray.length; i++) {
//System.out.printf("%d\t%d\t%d", sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);
//System.out.println();
}
//将稀疏数组还原为正常的数组
int old_arr[][] = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i=1; i < sparseArray.length; i++) {
int r = sparseArray[i][0];
int c = sparseArray[i][1];
int v = sparseArray[i][2];
old_arr[r][c] = v;
}
for(int[] row1 : old_arr) {
for(int data : row1) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}