对于一个棋盘的存档,即可作为二维数组的存储,1为白子,2为黑子,空子为0,。当落子数小于空子数,按原始二维数组存储会浪费存储空间,于是有了稀疏数组的概念。
假设有个11*11的棋盘,上面有两个落子1和2
转换稀疏数组
第一行固定存储行数,列数,落子总数,然后遍历棋盘,将有落子的行,列,值存储
如棋盘上的第二行,第三列1,记为1【行下标】,2【列下标】,1【值】。于是有了如下的稀疏数组
public class SparseArray { public static void main(String[] args) { //初始化棋盘 int[][] chessArr = new int[11][11]; chessArr[1][2] = 1; chessArr[2][3] = 2; for(int[] row : chessArr){ for(int data : row){ System.out.printf("%d\t", data); } System.out.println(); } //稀疏数组初始化并将棋盘值存储 int[][] sparseArr = new int[3][3]; sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = 2; int count = 1; for(int row = 0; row < chessArr.length; row++){ for(int col = 0; col < chessArr[0].length; col++){ if(chessArr[row][col] != 0){ sparseArr[count][0] = row; sparseArr[count][1] = col; sparseArr[count][2] = chessArr[row][col]; count++; } } } System.out.println("*******************ParseToSparseArray********************"); for(int[] row : sparseArr){ for(int data : row){ System.out.printf("%d\t", data); } System.out.println(); } //将稀疏数组恢复 System.out.println("*******************ParseToChessArray********************"); int[][] chessTwo = new int[sparseArr[0][0]][sparseArr[0][1]]; for(int row = 1; row < sparseArr.length; row++){ chessTwo[sparseArr[row][0]][sparseArr[row][1]] = sparseArr[row][2]; } for(int[] row : chessTwo){ for(int data : row){ System.out.printf("%d\t", data); } System.out.println(); } } }
执行结果