稀疏数组
用于表示保存一个二维数组/矩阵中非0的有效数值的信息。
格式为 多行3列
第一行 保存原数组的行,列,有效值的个数。
其他行 保存各个值在原数组中对应的 行,列,值
如下图有一个矩阵及它对应的稀疏数组
举例,创建一个11*11的矩阵,将它装成对应的稀疏数组,
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[4][5] = 2;
System.out.println("原始的二维数组");
for (int[] row:chessArr1) {
for (int data:row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
//将数组转化成稀疏数组
/**
* 稀疏数组, 格式为 多行3列 ,第一行 保存原数组的行,列,有效值的个数
* 其他行 保存各个值在原数组中对应的 行,列,值
*
*/
int sum = 0;
for (int i =0;i<chessArr1.length;i++){
for (int j =0;j<chessArr1[i].length;j++){
if (chessArr1[i][j]!=0){
sum++;
}
}
}
System.out.println(sum);
//创建稀疏数组 大小为 sum+1行 3列
int[][] spareArr= new int[sum+1][3];
//给稀疏数组赋值
spareArr[0][0] = 11;
spareArr[0][1] =11;
spareArr[0][2] = sum;
int count = 1;
for (int i =0;i<chessArr1.length;i++){
for (int j =0;j<chessArr1[i].length;j++){
if (chessArr1[i][j]!=0){
spareArr[count][0] = i;
spareArr[count][1] = j;
spareArr[count][2] =chessArr1[i][j] ;
count++;
}
}
}
System.out.println("稀疏数组为~~~~~~~~~~~~~~~~");
for (int i = 0;i<spareArr.length;i++){
System.out.printf("%d\t%d\t%d\t\n",spareArr[i][0],spareArr[i][1],spareArr[i][2]);
}
//将稀疏数组转化成原数组
int[][] chessArr2 = new int[spareArr[0][0]][spareArr[0][1]];
for (int i = 1; i < spareArr.length; i++) {
chessArr2[spareArr[i][0]][spareArr[i][1]]