在我们经常下的五子棋当中,通常在程序代码的实现当中,使用二维数组记录黑子和白子的位置,但是问题来了,一般在棋盘中有大量位置,没有被白子和黑子占用,这时使用二维数组来存储,必然会有大量位置没有使用,这样就会白白浪费很多空间,这时就可以使用稀疏数组
稀疏数据的描述
二维数组转化为稀疏数组的方法
1.之前已经说过,稀疏数组需要记录二维数组有多少个有效数据,所以第一步需要遍历原二维数组,计算有效数据的位数
2.根据有效数据的位数就可以创建稀疏数组了
3.再重新遍历二维数组,有效数据存储到稀疏数组当中
代码实现
public class Test {
public static void main(String[] args) throws InstantiationException,IllegalAccessException {
//定义原始数组
int i,j;
int a[][]=new int[7][8];
//定义三个非0数据
a[1][3]=1;
a[2][4]=8;
a[5][5]=4;
//打印原二维数组
System.out.println("原二维数组为:");
for(i=0;i<7;++i)
{
for(j=0;j<8;++j)
{
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
int sum=0;
//计算二维数组有效数据有多少个
for(i=0;i<7;++i)
{
for(j=0;j<8;++j)
{
if(a[i][j]!=0)
{
sum++;
}
}
}
System.out.println("总数为"+sum);
//得到了sum之后,就可以知道稀疏数组有多少行多少列了,由于稀疏数组第一行要专门存储原数组的行列数和元素个数,所以行数为sum加1
int b[][]=new int[sum+1][3];
//定义一个count,用来记录当前有效数据是第几个,以便存入到稀疏数组当中
b[0][0]=7;
b[0][1]=8;
b[0][2]=sum;
int count=0;
for(i=0;i<7;++i)
{
for(j=0;j<8;++j)
{
if(a[i][j]!=0)
{
count++;
b[count][0]=i;
b[count][1]=j;
b[count][2]=a[i][j];
}
}
}
//对得到的稀疏数组进行遍历
System.out.println("稀疏数组为:");
for(i=0;i<sum+1;++i)
{
for(j=0;j<3;++j)
{
System.out.print(b[i][j]+"\t");
}
System.out.println();
}
}
}