二维数组转化为稀疏数组:
//创建一个原始二维数组
//0表示无子,1表示黑子,2表示白子
int arr[][]=new int[11][11];
arr[1][2]=1;
arr[2][3]=2;
for (int arr1[] :arr){
for (int data:arr1){
System.out.printf("%d\t",data);
}
System.out.println();
}
//得到二维数组的非0值
int sum=0;
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(arr[i][j]!=0){
sum++;
}
}
}
System.out.println(sum);
//创建稀疏数组
int spareArray[][]=new int[sum+1][3];
//给稀疏数组赋值:
spareArray[0][0]=11;
spareArray[0][1]=11;
spareArray[0][2]=sum;
int count =0;//记录第几个非0的数据
//遍历二维数组,将非0的值放在spareArray中
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(arr[i][j]!=0){
count++;
spareArray[count][0]=i;
spareArray[count][1]=j;
spareArray[count][2]=arr[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组为:");
for(int a[] :spareArray ){
for(int dd:a){
System.out.printf("%d\t",dd);
}
System.out.println();
}
然后稀疏数组转化为二维数组:
自己想的方法:
int row = spareArray[0][0];
int col = spareArray[0][1];
int arr1[][]=new int [row][col];
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
for(int k=0;k<spareArray.length-1;k++){
if(i==spareArray[k+1][0]&&j==spareArray[k+1][1]){
arr1[i][j]=spareArray[k+1][2];
break;
}
else {
arr1[i][j]=0;
System.out.println(arr1[2][3]);
}
}
}
}
老师的方法:
int row = spareArray[0][0];
int col = spareArray[0][1];
int arr2[][]=new int [row][col];
for(int i=1;i<spareArray.length;i++){
arr2[spareArray[i][0]][spareArray[i][1]]=spareArray[i][2];
}