package com.weiting.sparsearray;
public class SparseArray {
public static void main(String[] args) {
// 实现一个棋盘即二维数组
int cheesearray[][]=new int[11][11];
//0表示未落子,1表示黑子,2表示篮子
cheesearray[1][2]=1;
cheesearray[2][3]=2;
cheesearray[4][5]=1;
//输出原始的二维数组
System.out.println("原始二维数组");
for(int[] row:cheesearray) {
for(int data:row) {
System.out.printf("%d、",data);
}
System.out.println();
}
//将二维数组转化为稀疏数组
//1.遍历二维数组得到非零的数字个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for(int j=0;j<11;j++) {
if(cheesearray[i][j] != 0){
sum++;
}
}
}
System.out.println("sum="+sum);
//创建对应的稀疏数组
int sparseArray[][]=new int[sum+1][3]; //sum+1表示总共有多少行因为下标是从零开始的所以加1
//给稀疏数组赋值
sparseArray[0][0]=11; //表示行row
sparseArray[0][1]=11; //表示列col
sparseArray[0][2]=sum; //表示值value
//遍历二维数组,将非零数存入稀疏数组中
int count=0; //用于记录第几个非零数据
for (int i = 0; i < 11; i++) {
for(int j=0;j<11;j++) {
if(cheesearray[i][j] != 0){
count++;
sparseArray[count][0]=i;
sparseArray[count][1]=j;
sparseArray[count][2]=cheesearray[i][j];
}
}
}
System.out.println("得到的稀疏数组为:");
for (int i = 0; i < sparseArray.length; i++) {
System.out.printf("%d\t%d\t%d\n",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);
}
//将稀疏数组恢复为二维数组
//读取稀疏数组的第一行,根据第一行的数据创建二维数组
int cheesearray1[][]=new int[sparseArray[0][0]][sparseArray[0][1]];
for(int i=1;i<sparseArray.length;i++) {
cheesearray1[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
}
//输出二维数组
System.out.println("输出恢复不完全的二维数组");
for(int[] row:cheesearray1) {
for(int data:row) {
System.out.printf("%d、",data);
}
System.out.println();
}
}
}
二维数组与稀疏数组的相互转化
最新推荐文章于 2021-07-07 13:58:27 发布