这次学习的目的是为了让自己的逻辑更加系统化,希望能如愿以偿。
稀疏数组:(五子棋存档)
当一个数组的大部分元素为零时,可以使用稀疏数组以减小规模。
记录几行几列,多少不同的值,以及行列值。
二维数组–>稀疏数组
1、遍历原始的二维数组,得到有效数据的个数。sum
2、根据sum就可以创建稀疏数组sparsearr int【sum+1】
3、将二维数组的有效数据存入到稀疏数组。
稀疏数组–>原始的二维数组
1、读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,
2、在读取稀疏数组后几行的数据,并赋给原始的二维数据即可。
代码实现:
public class SparseArr {
public static void main(String[] args) {
//创建一个原始的二维数组
//1表示黑子,2表示蓝子
int[][] chessArr =new int[8][8];
chessArr[1][2]=1;
chessArr[2][3]=2;
int sum=0;
//二维数组转稀疏数组
//稀疏数组的第一行:
//判断有效值个数
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr.length; j++) {
if (chessArr[i][j]!=0){
sum++;
}
}
}
//初始化稀疏数组
int[][] sparseArr=new int[sum+1][3];
sparseArr[0][0]=chessArr.length;
sparseArr[0][1]=chessArr[0].length;
sparseArr[0][2]=sum;
int count=1;
//再次遍历二维数组,将有效值写入稀疏数组
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr.length; j++) {
if (chessArr[i][j]!=0){
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr[i][j];
count++;
}
}
}
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}
//将稀疏数组转化为二维数组
//初始化二维数组
int[][] chessArr2 =new int[sparseArr[0][0]][sparseArr[0][1]];
//遍历稀疏数组,将有效值存入二维数组
for (int i = 1; i < sparseArr.length; i++) {
int x=sparseArr[i][0];
int y=sparseArr[i][1];
chessArr2[x][y]=sparseArr[i][2];
}
for (int[] ints : chessArr2) {
for (int anInt : ints) {
System.out.printf("%d\t", anInt);
}
System.out.println();
}
}
}
今天的算法先到这里,每天一点点,加油。