利用稀疏数组存储“棋盘”的棋子布局
package chapter_3;
public class demo7_3_XiShuShuZu {
public static void main(String[] args) {
//稀疏数组
// 原来的数组 “棋盘”
int [][]a=new int[10][10];
a[1][1]=1;
a[1][3]=2;
a[5][7]=2;
int sum=0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j]!=0)
sum++;
}
}
//遍历原来的数组
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
//创建存储数组。
// 第一行存储原来数组的行列数,有效数字个数。
// 其余行:第一列存储有效数字行下标,第二列存储列下标,第三列存储有效数字(例如 1 or 2)
int [][]b=new int[sum+1][3];
b[0][0]=a.length;
b[0][1]=a.length;
b[0][2]=2;
int index=1;
for (int i = 0; i <a.length ; i++) {
for (int j = 0; j < a.length; j++) {
if (a[i][j]!=0){
b[index][0]=i;
b[index][1]=j;
b[index][2]=a[i][j];
index++;
}
}
}
//遍历存储数组b
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[i].length; j++) {
System.out.print(b[i][j]+" ");
}
System.out.println();
}
//恢复原来数组
int [][]c=new int[b[0][0]][b[0][1]];
for (int i = 1; i <b.length; i++) {
c[b[i][0]][b[i][1]]=b[i][2];
}
//遍历恢复后的数组c
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < c[i].length; j++) {
System.out.print(c[i][j]+" ");
}
System.out.println();
}
}
}