将原始的二维数组经过处理,得到稀疏数组。
稀疏数组的格式: 第一行记录原始的二维数组一共有几行几列多少了非零数字
(sparseArray) 一共有三列 row col value
二维数组 转 稀疏数组的 思路:
- 判断二维数组的行列,及非零元个数,写入到稀疏数组中的第一行中
- 记录非零元个数的位置,依次写入到稀疏数组中
稀疏数组 转 二维数组的 思路:
- 先取到第一行稀疏数组的数据行列。
- 再将稀疏数组下的元素信息赋值到原始的二维数组中
import java.util.Scanner;
public class SparseArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 首先先输入原始二维数组的行列数
Scanner input = new Scanner(System.in);
int row = input.nextInt(); // 输入行
int col = input.nextInt(); // 输入列
int[][] chessArray = new int[row][col]; // 创建原始二维数组
chessArray[1][3] = 1;
chessArray[2][1] = 2;
chessArray[4][2] = 4;
chessArray[5][4] = 4;
System.out.println("原始二维矩阵为: ");
for(int[] r : chessArray){
for (int data : r){
System.out.print(data + "\t");
}
System.out.println();
}
int sum = 0; // 定义稀疏数组的行数
for(int[] r : chessArray){
for (int data : r){
if (data != 0){
sum++;
}
}
}
// 转化为稀疏数组 row col value
// 创建稀疏数组,并初始化稀疏矩阵
int[][] sparseArray = new int[sum+1][3];
sparseArray[0][0] = row;
sparseArray[0][1] = col;
sparseArray[0][2] = sum;
// 将原始数组的非零元素 添加到 稀疏数组中
int count = 1;
for (int i=0; i<row; i++){
for (int j=0; j<col; j++){
if (chessArray[i][j] != 0){
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArray[i][j];
count++;
}
}
}
// 遍历 稀疏矩阵
System.out.println("稀疏矩阵为: ");
for (int[] r : sparseArray){
for (int data : r){
System.out.print(data + "\t");
}
System.out.println();
}
// 再将 稀疏矩阵 转化为 二维数组
// 第一步: 先要获取稀疏数组的第一行元素信息
int row1 = sparseArray[0][0]; // 行
int col1 = sparseArray[0][1]; // 列
// 创建二维数组
int[][] chessArray1 = new int[row1][col1];
for (int i=1; i<sparseArray.length; i++){
for (int j=0; j<3; j++){
// 将稀疏矩阵的信息赋值到二维数组中
chessArray1[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
}
// 打印二维矩阵
System.out.println("稀疏矩阵转化为二维矩阵为: ");
for (int[] r : chessArray1){
for (int data : r){
System.out.print(data + "\t");
}
System.out.println();
}
}
}