0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
假设上面就是一个11*11的五子棋,0代表空位,1 代表白棋,2代表黑黑旗;
其实有用的就是1,2;要是把0,1,2全存下,有点浪费,
这时候用稀疏数组,记录,可以减小空间;
稀疏数组的处理方法是:
1.记录数组有几行激烈,有多少个不同的值;
2.把具有不同值的行列记录在一个小规模的数组中,从而所以程序的规模;
稀疏数组的第一行存多少列,多少行,有多少个值;
接下来都是存值 的位置, 行,列,值;这种方式;
demo:
int chessArr[][] = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
System.out.println("原数组是:");
for (int[] row : chessArr) {
for (int i : row) {
System.out.printf("%d\t", i);
}
System.out.println();
}
//由于稀疏数组根据多少值来确定行数,先得到有多少值
int sum = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr[i].length; j++) {
if (chessArr[i][j] != 0) {
sum++;
}
}
}
System.out.println("总共有:" + sum + "个值");
//接下来转成稀疏数组
int sparseArr[][] = new int[sum + 1][3];
//稀疏数组的第一行
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
//存值
int count = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr[i].length; j++) {
if (chessArr[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr[i][j];
}
}
}
//
System.out.println("转换成稀疏数组");
for (int[] row : sparseArr) {
for (int i : row) {
System.out.printf("%d\t", i);
}
System.out.println();
}
//然后将稀疏数组还原成二维数组
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
System.out.println("还原后的棋谱");
for (int[] row : chessArr2) {
for (int i : row) {
System.out.printf("%d\t",i);
}
System.out.println();
}
/./值:
原数组是:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
总共有:2个值
转换成稀疏数组
11 11 2
1 2 1
2 3 2
还原后的棋谱
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0