package com.wang.dateStructures;
//稀疏数组
public class Compress {
public static void main(String[] args) {
//创建一个11*11的数组来模拟棋盘
//1表示黑子 2表示白字 0表示无子
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[3][4] = 2;
//增强for循环来输出二维数组
System.out.println("原始的二维数组:");
for (int[] ints : chessArr1) {
for(int data : ints){
System.out.print(data+" ");
}
System.out.println();
}
//创建一个转化类对象
Sparse sparse = new Sparse();
//创建一个稀疏矩阵
System.out.println("原始数组转化为稀疏数组:");
final int[][] chessArr2 = sparse.toSpares(chessArr1, 11, 11);
for (int[] ints : chessArr2) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
//创建一个普通矩阵
System.out.println("稀疏数组转化为原始数组:");
int[][] chessArr3 = sparse.toCommon(chessArr2);
for (int[] ints : chessArr3) {
for (int anInt : ints) {
System.out.print(anInt+" ");
}
System.out.println();
}
///
}
}
class Sparse{
//原始数组转化为稀疏数组
public int[][] toSpares(int[][] a,int row,int col){
int sum = 0;
for (int[] ints : a) {
for (int anInt : ints) {
if(anInt != 0)
sum++;
}
}
//创建稀疏数组
int[][] sparseary = new int[sum + 1][3];
sparseary[0][0]=row;
sparseary[0][1]=col;
sparseary[0][2]=sum;
int satrt = 1;
for (int i = 0;i<row;i++)
for(int j = 0;j<col;j++)
{
if(a[i][j] != 0)
{
sparseary[satrt][0] = i;
sparseary[satrt][1] = j;
sparseary[satrt][2] = a[i][j];
satrt++;
}
}
return sparseary;
}
//稀疏矩阵转化为原始矩阵
public int[][]toCommon(int[][] a){
int row = a[0][0];
int col = a[0][1];
int number = a[0][2];
int[][] common = new int[row][col];
for (int i = 1; i < a.length; i++) {
int row1 = a[i][0];
int col1 = a[i][1];
int val = a[i][2];
common[row1][col1] = val;
}
return common;
}
}
稀疏数组与原始数组之间的转化
最新推荐文章于 2024-09-12 13:19:42 发布
该博客展示了如何在Java中实现二维数组(模拟棋盘)与稀疏数组之间的转换。首先创建了一个11x11的二维数组,并用1和2表示黑子和白子,然后通过`toSpares`方法将其转换为稀疏数组,再用`toCommon`方法将稀疏数组还原为二维数组。整个过程详细展示了稀疏数组在存储和处理大量非零元素时的效率优势。
摘要由CSDN通过智能技术生成