假如矩阵只有很少的值是有效的,其余值均为0或均相同,按以下普通矩阵的方法存储无疑浪费了很多空间,我们可以采用稀疏矩阵的方法存储。
稀疏矩阵第一行三个值分别存的是普通矩阵的行数,列数,和有效值个数。
稀疏矩阵除第一行外每行的三个值分别是有效值所在的行、列和有效值。
public class SparseMatrixTest { public static void main(String[] args) { // 普通矩阵 int[][] arrays1 = new int[10][10]; arrays1[1][2] = 1; arrays1[3][5] = 2; //打印普通矩阵 printArray(arrays1); //原始矩阵 ——> 稀疏矩阵 //求有效值个数 int len = 0; for (int[] array : arrays1) { for (int i : array) { if (i != 0) { len++; } } } //声明稀疏矩阵。 int[][] arrays2 = new int[len+1][3]; /* arrays2[0][0]是矩阵的行 arrays2[0][1]是矩阵的列 arrays2[0][2]是矩阵有效值个数 */ arrays2[0][0] = arrays1.length; arrays2[0][1] = arrays1[0].length; arrays2[0][2] = len; //给稀疏矩阵赋值。 int count = 0; for (int i = 0; i < arrays1.length; i++) { for (int j = 0; j < arrays1[i].length; j++) { if (arrays1[i][j] != 0) { count++; //有效值所在行 arrays2[count][0] = i; //有效值所在列 arrays2[count][1] = j; //有效值 arrays2[count][2] = arrays1[i][j]; } } } //打印数组 printArray(arrays2); //稀疏矩阵 --> 原始矩阵 int[][] arrays3 = new int[arrays2[0][0]][arrays2[0][1]]; for (int i = 1; i < arrays2.length; i++) { arrays3[arrays2[i][0]][arrays2[i][1]] = arrays2[i][2]; } //打印数组 printArray(arrays3); } public static void printArray(int[][] arrays){ for (int[] array : arrays) { for (int i : array) { System.out.print(i + "\t"); } System.out.println(); } } }