package struct;
public class SparseArr {
public static void main(String[] args) {
int chess[][] = new int[11][11];
//0代表空白,1代表黑子,2代表蓝子
chess[1][2] = 1;
chess[2][3] = 2;
int sum = 0;
//获取有效值个数
for (int[] rows : chess) {
for (int data : rows) {
System.out.printf("%d ", data);
if (data != 0) {
sum++;
}
}
System.out.println();
}
//创建稀疏数组
int[][] sparseArr = new int[sum + 1][3];
//给稀疏数组赋值
sparseArr[0][0] = 11;//棋盘的行数
sparseArr[0][1] = 11;//棋盘的列数
sparseArr[0][2] = sum;//棋盘上的棋子个数
//二维数组的长度为行数
int count = 1;
for (int i = 0; i < chess.length; i++) {
for (int j = 0; j < chess[0].length; j++) {
if (chess[i][j] != 0) {
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chess[i][j];
count++;
}
}
}
//输出稀疏数组
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d %d %d
", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);
}
//还原二维数组
int[][] chess1Arr = new int[sparseArr[0][0]][sparseArr[0][1]];
//给二维数组赋值
for (int i = 1; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr[0].length; j++) {
chess1Arr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
}
//输出二维数组
for (int i = 0; i < chess1Arr.length; i++) {
for (int j = 0; j < chess1Arr[0].length; j++) {
System.out.printf("%d ", chess1Arr[i][j]);
}
System.out.println();
}
}
}