二维数组转稀疏数组
1、遍历二维数组,得到有效数据的个数sum
2、创建parseArr int [sum+1][3]
3、遍历,将有效数据存入parseArr
稀疏数组还原成二维矩阵
1、读取parseArr的第一行,由第一行的数据创建二维数组array = int [parseArr[0][0]][parseArr[0][1]]
2、遍历parseArr后几行的数据并赋给array
11*11棋盘的例子
import java.util.Iterator;
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;
//输出原始的二维数组
System.out.printf("原始的二维数组:\n");
for(int[] row:chessArr1) {
for(int data:row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
//将二维数组转稀疏数组
//1、遍历chessArray,得到有效(非零)数据
int sum = 0;
for (int i = 0; i < 11; i++) {
for(int j = 0; j< 11; j++) {
if(chessArr1[i][j]!=0) {
sum++;
}
}
}
//2、创建对应稀疏数组
int sparseArr[][] = new int[sum+1][3];
//给稀疏数组赋值
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
//3、存数据
int count = 1;
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++;
}
}
}
System.out.printf("稀疏数组:\n");
for(int[] row:sparseArr) {
for(int data:row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
//将稀疏数组还原
//1、先读取parseArr第一行得到size,并创建二维数组
int newArr[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
//读取parseArr后几行的数据赋给newArr
for(int i=1; i<sparseArr.length;i++) {
newArr[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
System.out.printf("还原后的数组为:\n");
for(int [] row:newArr) {
for(int data:row ) {
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}