老韩的课程的有关稀疏数组的代码
- 首先将原数组压缩
- 压缩为3列,分别存放原数组中不是0的横纵坐标和值
- 根据压缩的矩阵还原原来的数组
package sparseArr;
/**
* @author jkk
*/
public class Main1 {
//创建一个稀疏数组
static int [][]creatArr(){
int [][]arr = new int[11][11];
arr[1][2] = 1;
arr[2][3] = 2;
return arr;
}
//将稀疏数组压缩
static int [][] creatSparseArr(int[][]arr){
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <arr[i].length; j++) {
if(arr[i][j] !=0){
sum++;
}
}
}
int [][]arr1 = new int[sum+1][3];
arr1[0][0] = arr.length;
arr1[0][1] = arr[0].length;
arr1[0][2] = sum;
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(arr[i][j] !=0){
count++;
arr1[count][0] = i;
arr1[count][1] = j;
arr1[count][2] = arr[i][j];
}
}
}
return arr1;
}
//恢复为原来的稀疏数组
static int [][]change(int[][]arr){
int [][]arr1 = new int[arr[0][0]][arr[0][1]];
for (int i = 1; i < arr.length; i++) {
arr1[arr[i][0]][arr[i][1]] = arr[i][2];
}
return arr1;
}
//打印数组
static void print(int[][]arr){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
public static void main(String[] args) {
int [][]arr = creatArr();
System.out.println("原来的矩阵为:");
print(arr);
int [][]arr1 = creatSparseArr(arr);
System.out.println("压缩后的矩阵为:");
print(arr1);
int [][]arr2 = change(arr1);
System.out.println("还原后的矩阵为:");
print(arr2);
}
}