public class SpareMatrix {
public static void main(String[] args) {
int[][] arrs = new int[5][5];
arrs[1][1] = 1;
arrs[1][2] = 2;
arrs[2][3] = 1;
System.out.print(ArraytoString(arrs));
arrs=convertToSpareMatrix(arrs);
System.out.print(ArraytoString(arrs));
arrs = convertToArray(arrs);
System.out.print(ArraytoString(arrs));
}
//转换稀疏矩阵
private static int[][] convertToSpareMatrix(int[][] ars) {
// TODO 自动生成的方法存根
//计算非0值的数量
int noZeroSum = 0;
for (int[] rows : ars) {
for (int num : rows) {
if (num!=0) {
noZeroSum++;
};
}
}
//创建空数组
int[][] spArr = new int[noZeroSum+1][3];
spArr[0][0]=ars.length;
spArr[0][1]=ars[0].length;
spArr[0][2]=noZeroSum;
int index = 1;
//遍历原数组的有效元素
for (int i = 0; i < ars.length; i++) {
for (int j = 0; j < ars[i].length; j++) {
int tmp = ars[i][j];
if(tmp!=0) {
spArr[index][0]=i;
spArr[index][1]=j;
spArr[index][2]=tmp;
index++;
}
}
}
return spArr;
}
//稀疏矩阵转换回数组
private static int[][] convertToArray(int[][] ars) {
// TODO 自动生成的方法存根
int[][] nmArr = new int[ars[0][0]][ars[0][1]];
for (int i = 1; i < ars.length; i++) {
nmArr[ars[i][0]][ars[i][1]]=ars[i][2];
}
return nmArr;
}
//打印数组
public static String ArraytoString(int[][] ars) {
StringBuilder stringBuilder = new StringBuilder();
for (int[] rows : ars) {
for (int num : rows) {
stringBuilder.append(num);
}
stringBuilder.append("\r\n");
}
return stringBuilder.toString();
}
}
暂无评论