1.创建1个11*11的棋盘,在棋盘中 1代表黑棋 2代表蓝棋 没有棋子则表示0 用二维数组就可以轻易实现 如下图
//创建一个原始的二维数组 11*11
//0 表示没有棋子 1表示黑子 2表示蓝子
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][4] = 2;
System.out.println("原始二维数组");
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
System.out.print(chessArr1[i][j]+" ");
}
System.out.println();
}
2.通过双重循环求出需要存储的棋子数量,根据棋子数量创建存储棋子的二维数组
//先遍历二维数组 得到非0的个数
int sum = 0;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1.length; j++) {
if(chessArr1[i][j] != 0)
sum+=1;
}
}
3.创建相应稀疏数组,存储棋子的位置和值
//创建对应的稀疏数组
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 < chessArr1.length; i++) {
for (int j = 0; j < chessArr1.length; j++) {
if(chessArr1[i][j] != 0) {
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr1[i][j];
}
}
}
System.out.println("输出稀释数组");
for (int i = 0; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr.length; j++) {
System.out.print(sparseArr[i][j]+" ");
}
System.out.println();
}
输出稀疏数组为:
| 11 | 11 | 2 |
| 1 | 2 | 1 |
| 2 | 4 | 2 |
第一行:第一个11代表一共有11行,第二个11代表一共有11列 2代表一共要存储多少棋子
第二行:第一个1表示第一行,第二个2代表第二列,第三个1代表值为1,后面以此类推
4.将稀疏数组恢复成棋盘形式
//修复二维数组
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 i = 0; i < chessArr2.length; i++) {
for (int j = 0; j < chessArr2.length; j++) {
System.out.print(chessArr2[i][j]+" ");
}
System.out.println();
}
附上整段代码:
//稀疏数组的实现
public static void main(String[] args) {
//创建一个原始的二维数组 11*11
//0 表示没有棋子 1表示黑子 2表示蓝子
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][4] = 2;
System.out.println("原始二维数组");
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
System.out.print(chessArr1[i][j]+" ");
}
System.out.println();
}
//先遍历二维数组 得到非0的个数
int sum = 0;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1.length; j++) {
if(chessArr1[i][j] != 0)
sum+=1;
}
}
//创建对应的稀疏数组
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 < chessArr1.length; i++) {
for (int j = 0; j < chessArr1.length; j++) {
if(chessArr1[i][j] != 0) {
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr1[i][j];
}
}
}
System.out.println("输出稀释数组");
for (int i = 0; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr.length; j++) {
System.out.print(sparseArr[i][j]+" ");
}
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 i = 0; i < chessArr2.length; i++) {
for (int j = 0; j < chessArr2.length; j++) {
System.out.print(chessArr2[i][j]+" ");
}
System.out.println();
}
}



