稀疏数组
1.1 稀疏数组处理方法
- 定义:稀疏数组是二维数组,行数有原数组的数据决定,列数一般为3列
- 作用:稀疏数组把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
稀疏数组的第一行记录原数组 的行数、列数及不为零的数量。
第一列:原数组的行数
第二列:原数组的列数
第三列:原数组有多少个不为零的值
之后的行记录原数组中不为零(x)的值所在的行数、列数以及 x 的值
第一列:x 在原数组中的行数
第二列:x 在原数组中的列数
第三列:x 的值
1.2 例子
使用稀疏数组存储五子棋棋盘数据
思路:
1.将棋盘信息以二维数组输出
2.遍历该二维数组,得到有效数据个数sum
3.根据sum可以创建稀疏数组 sparseArr[sum][3]
4.将二维数组的有效数据存入稀疏数组
1.3 代码实现
public class SparesArray {
public static void main(String[] args) {
int[][] chess = createChess();
createSparseArray(chess);
}
/**
* 创建棋盘
*/
public static int[][] createChess() {
int chessRow = 9;
int chessCol = 9;
int[][] chess = new int[chessRow][chessCol];
chess[3][2] = 1;//1代表黑子
chess[4][1] = 2;//2代表白子
System.out.println("原二位数组");
for (int row = 0; row < chessRow; row++) {
for (int col = 0; col < chessCol; col++) {
System.out.printf("%d\t", chess[row][col]);
}
System.out.println();
}
System.out.println();
return chess;
}
/**
* 生成稀疏数组
*
* @param chess
*/
public static void createSparseArray(int[][] chess) {
int[][] sparseArr = new int[3][3];
sparseArr[0][0] = 9;
sparseArr[0][1] = 9;
sparseArr[0][2] = 2;
int count = 0;
for (int row = 0; row < 9; row++) {
for (int col = 0; col < 9; col++) {
int val = chess[row][col];
if (val != 0) {
count++;
sparseArr[count][0] = row;
sparseArr[count][1] = col;
sparseArr[count][2] = val;
}
}
}
System.out.println("稀疏数组");
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d %d %d ", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);
System.out.println();
}
}
}
输出:
原二位数组
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 1 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
稀疏数组
9 9 2
3 2 1
4 1 2