稀疏矩阵例子
稀疏矩阵和二维矩阵转换思路
代码实现
注意,此处为了便于重复使用,将其封装成了两个静态方法。
很不优雅的地方在于手动计算二维数组的行和列。
需要注意的点是java中二维数组的length属性默认给出的是行的个数
。
public class SparseArray {
public static void main(String[] args) {
// 创建原始二维数组
// 0 表示无棋子 1 黑棋子 2 白棋子
int[][] chessArray1 = new int[11][11];
chessArray1[1][2] = 1;
chessArray1[2][3] = 2;
print2DimArray(chessArray1);
System.out.println("稀疏数组");
int[][] sparseArray = getSparseArray(chessArray1);
System.out.println("row col val");
print2DimArray(sparseArray);
System.out.println("\n还原:");
int[][] chessArray2 = sparseArray2ChessArray(sparseArray);
print2DimArray(chessArray2);
}
public static int[][] getSparseArray(int[][] chessArray) {
int sum = 0;
int row = 0;
int col = 0;
for (int[] rowArr : chessArray) {
row++;
col = 0;
for (int item : rowArr) {
col++;
if (item != 0) {
sum++;
}
}
}
int count = 0;
int[][] sparseArray = new int[sum+1][3];
sparseArray[0][0] = row;
sparseArray[0][1] = col;
sparseArray[0][2] = sum;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (chessArray[i][j] != 0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArray[i][j];
}
}
}
return sparseArray;
}
public static int[][] sparseArray2ChessArray(int[][] sparseArray) {
int row = sparseArray[0][0];
int col = sparseArray[0][1];
int sum = sparseArray[0][2];
int[][] chessArray = new int[row][col];
for (int i = 1; i < sparseArray.length; i++) {
chessArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
return chessArray;
}
public static void print2DimArray(int[][] cs) {
for (int[] row : cs) {
for(int item: row) {
System.out.printf("%d\t", item);
}
System.out.println();
}
}
}
代码结果:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
稀疏数组
row col val
11 11 2
1 2 1
2 3 2
还原:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0