package 稀疏数组;
public class 稀疏数组的代码实现 {
public static void main(String[] args) {
// 原始二维数组
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
// 原始二维数组
// for(int [] row :chessArr1){
// for(int data :row){
// System.out.printf("%d\t",data);
// }
// System.out.println();
// }
int sum = 0;
// 遍历出数据个数
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr1[i][j] != 0){
sum++;
}
}
}
// System.out.println(sum);
// 稀疏数组 行为数据个数加一 列依次存储数据在二维数组的行 列 数据值 特别的是第一行的数据值为二维数组的数据个数
int sparseArr [][] = new int[sum+1][3];
// 稀疏数组的初始行数为0
int count = 0;
// 存储原始数组的行数
sparseArr[count][0] = 11;
// 存储原始数组的列数
sparseArr[count][1] = 11;
// 存储原始数组的数据数
sparseArr[count][2] = sum;
//存储完第一行数据 行数加一
count++;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr1[i][j] != 0){
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
count++;
}
}
}
// 输出稀疏数组
// for(int [] row :sparseArr){
// for(int data :row){
// System.out.printf("%d\t",data);
// }
// System.out.println();
// }
// 取出原始数组行列数
int row = sparseArr[0][0];
int col = sparseArr[0][1];
int chessArr2 [][] = new int[row][col];
// 还原数据位置
for (int i = 1; i < sum+1; i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
// 恢复二维数组
for(int [] rows :chessArr2){
for(int data :rows){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}