稀疏数组通常用于做棋盘游戏,用来保存每个棋子的位置和值,以达到保存棋局又不用保存整个二维数组以此来节省内存
稀疏数组[非空值个数加一(列)][3(行)] 第一列的三行分别是棋盘的行列最大长度和一共有多少个非空值(棋子),
首先要遍历棋盘拿到棋子个数才能建立稀疏数组,建立后再遍历一次,从稀疏数组第二列开始
刻录每个棋子的行,列,值,至于行是放[几号棋子][0]还是[][1]自己选
稀疏转二维就读取第一列的最大行列值来初始化数组,然后挨个读取稀疏数组来还原棋盘,
(循环稀疏数组的列)
package structure;
public class sparsestructure {
public static void main(String[] args) {
// TODO Auto-generated method stub
int chess[][] = new int[11][11];
chess[1][2]=1;
chess[2][3]=2;
for(int k1[]:chess) {
for(int k2:k1) {
System.out.printf("%d\t",k2);
}
System.out.println();
}
int sum = 0;
for(int i = 0;i<11;i++) {
for(int i2 = 0;i2<11;i2++) {
if(chess[i][i2]!=0) {
sum++;
}
}
}
System.out.println(sum);
int sparse [][] = new int[sum+1][3];
sparse [0][0]=11;
sparse [0][1]=11;
sparse [0][2]=sum;
int z1 = 0;
for (int b1 = 0;b1<11;b1++) {
for (int b2 = 0;b2<11;b2++) {
if(chess[b1][b2]!=0) {
z1++;
sparse[z1][0]=b1;
sparse[z1][1]=b2;
sparse[z1][2]=chess[b1][b2];
}
}
}
for(int i =0;i<sparse.length;i++) {
System.out.printf("%d\t%d\t%d\t",sparse[i][0],sparse[i][1],sparse[i][2]);
System.out.println();
}
int chess2[][]=new int[sparse[0][0]][sparse[0][1]];
for(int i1 = 1;i1<sparse.length;i1++) {
chess2[sparse[i1][0]][sparse[i1][1]]= sparse[i1][2];
}
for(int k1[]:chess2) {
for(int k2:k1) {
System.out.printf("%d\t",k2);
}
System.out.println();
}
}
}