Sparse.java
public class Sparse {
private int sum;
private int[][] spArr;
//初始化
public Sparse(int[][] arr, int ss) {
this.sum=ss;
this.spArr = new int [sum+1][3];
this.spArr[0][0]=arr.length;
this.spArr[0][1]=arr[0].length;
this.spArr[0][2]=sum;
}
//压缩成稀疏矩阵
public void in(int[][] arr) {
int count=0;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[0].length;j++) {
if(arr[i][j]!=0) {
count++;
spArr[count][0]=i;
spArr[count][1]=j;
spArr[count][2]=arr[i][j];
}
}
}
}
//输出稀疏矩阵
public void out() {
for(int i=0;i<spArr.length;i++) {
System.out.printf("%d\t%d\t%d\t",spArr[i][0],spArr[i][1],spArr[i][2]);
System.out.println();
}
}
//还原
public void huanYuan() {
//5行7列矩阵
int hysA[][] = new int [spArr[0][0]][spArr[0][1]];
//
for(int i=1;i<spArr.length;i++) {
hysA[spArr[i][0]][spArr[i][1]]=spArr[i][2];
}
//
for(int i=0;i<hysA.length;i++) {
for(int j=0;j<hysA[i].length;j++) {
System.out.printf("%d\t",hysA[i][j]);
}
System.out.println();
}
}
}
TestSparse.java
public class TestSparse {
public static void main(String[] args) {
int arr[][] = new int[5][7];
arr[0][1]=1;
arr[1][2]=2;
arr[3][3]=3;
arr[3][5]=4;
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++;
}
}
}
Sparse testSp = new Sparse(arr,sum);
testSp.in(arr);
System.out.println("稀疏矩阵:");
testSp.out();
System.out.println("还原之后:");
testSp.huanYuan();
}
}