package com.util;
public class SparseUtil {
/**
//二维数组转稀疏数组
* 1.遍历二维数组,得出有效的个数sum
* 2.根据sum创建稀疏数组 Array[sum+1][3] 稀疏数组n行3列
* 【稀疏数组第一行 第一列为原始数组的总行 第二列为原数组总列第三列为有效个数】
* 3.将有效的数组数据转入稀疏数组
*/
public static int [][]ArrayToXishu(int [] [] array){
int sum=0;//有效个数
int row=array.length; //总行数
int column=array[0].length;//总列数
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
int index=array[i][j];
if(index!=0){
sum++;
}
}
}
int [][] newArray=new int[sum+1][3];//稀疏数组
newArray[0][0]=row;
newArray[0][1]=column;
newArray[0][2]=sum;
int newrow=1;
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
int index=array[i][j];
if(index!=0){
newArray[newrow][0]=i;
newArray[newrow][1]=j;
newArray[newrow][2]=index;
newrow++;
}
}
}
return newArray;
}
/**
//稀疏数组转二维数组
* 1.根据第一行的数据创建原始数组 array[n][3] => new array[n][n]
* 2.在读取后面的数据并复给原始的二维数组
*/
public static int [][]XishuToArray(int [] [] array){
int row=array[0][0];//原始数据的行
int column=array[0][1];//原始数据的列
int sum=array[0][2];//原始数据有效数量
int newarray[][]=new int[row][column];
for(int i=1;i<array.length;i++){
int a=array[i][0];
int b=array[i][1];
int c=array[i][2];
newarray[a][b]=c;
}
return newarray;
}
public static void main(String[] args) {
//定义二维数组
int [] [] array=new int[11][11];
array[1][2]=1;
array[2][2]=1;
array[2][3]=2;
array[3][2]=2;
array[1][4]=1;
array[1][3]=2;
array[3][3]=1;
System.out.println("=========================原始二维===================");
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++){
int index=array[i][j];
System.out.print("\t"+index);
}
System.out.println("\n");
}
System.out.println("=========================二维转稀疏===================");
int [] [] newarray= SparseUtil.ArrayToXishu(array);
for(int i=0;i<newarray.length;i++){
for(int j=0;j<newarray[i].length;j++){
int index=newarray[i][j];
System.out.print("\t"+index);
}
System.out.println("\n");
}
System.out.println("=========================稀疏转二维===================");
int [] [] oldArray= SparseUtil.XishuToArray(newarray);
for(int i=0;i<oldArray.length;i++){
for(int j=0;j<oldArray[i].length;j++){
int index=oldArray[i][j];
System.out.print("\t"+index);
}
System.out.println("\n");
}
}
}