概念
- 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
- 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
左边为原始数组,右边为稀疏数组。
代码实现
1.创建棋盘
public class SparseArray {
public static void main(String[]args)
{
//创建一个二维数组11*11
//0:没有棋子 1:黑子 2:蓝子
int chessArr1[][]=new int[11][11];//创建棋盘
chessArr1[1][2]=1;
chessArr1[2][3]=2;//第三行第四列有一个蓝色子
//输出原始二维数组
System.out.println("原始二维数组");
for(int row[]:chessArr1)
{
for(int data:row)
System.out.printf("%d\t",data);
System.out.println();
}
2.将二维数组转成稀疏数组
//1.先遍历二维数组得到非0数据的个数
int sum=0;
for(int i=0;i< chessArr1.length;i++)
{
for(int j=0;j<11;j++)//遍历列
{
if(chessArr1[i][j]!=0)
{
sum++;
}
}
}
System.out.println("sum="+sum);
//2.创建对应的稀疏数组sparseArr int[sum+1][3]
int sparseArr[][]=new int[sum+1][3];//列是三
//给稀疏数组赋值
sparseArr[0][0]=11;//row
sparseArr[0][1]=11;//col
sparseArr[0][2]=sum;//val
//遍历二维数组,将非0的值存放到sparseArr中
int count=0;//用于记录是第几个非0数据
for(int i=0;i< chessArr1.length;i++)
{
for(int j=0;j<11;j++)//遍历列
{
if(chessArr1[i][j]!=0)
{
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr1[i][j];
}
}
}
//输出稀疏数组的形式
System.out.println();
System.out.println("得到的稀疏数组如下");
for(int i=0;i< sparseArr.length;i++)
{
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}
System.out.println();