> 文档中心 > 数组转为稀疏数组

数组转为稀疏数组

public class SparseArray {public static final int NUM=10;//常量定义数组大小public int[][] chees ;//表示原数组public int[][] sparse;//表示稀疏数组public int[][] chees2;//表示恢复后的数组public int sum;//记录非零数字个数//创建一个初始的二维数组public void setChees(int chees[][]) {chees[1][2]=1;chees[2][3]=2;chees[1][6]=2;chees[0][0]=2;}//创建对应的稀疏数组public void cheestosparse(int[][] chees,int sparse[][]) {//给稀疏数组赋值sparse[0][0]=NUM;sparse[0][1]=NUM;sparse[0][2]=sum;int count=0;//count用于记录第几个非零数据for(int i=0;i<NUM;i++) {for(int j=0;j<NUM;j++) {if(chees[i][j]!=0) {count++;sparse[count][0]=i;sparse[count][1]=j;sparse[count][2]=chees[i][j];}}}}//将稀疏数组恢复成原始的二维数组public void sparse2chees(int[][] sparse,int[][] chees2) {for(int i=1;i<sparse.length;i++) {chees2[sparse[i][0]][sparse[i][1]]=sparse[i][2];}}//打印数组public void printArray(int[][] array) {for(int[] row:array) {for(int date:row) {System.out.printf("%d\t",date);}System.out.printf("\n");}} //统计棋子的个数public int count(int[][] array) {for(int i=0;i<NUM;i++) {for(int j=0;j<NUM;j++) {if(array[i][j]!=0) {sum++;}}}return sum;}public static void main(String[] args) {SparseArray s = new SparseArray();s.chees=new int[NUM][NUM];s.setChees(s.chees);System.out.println("原始的二维数组");s.printArray(s.chees);s.sum=s.count(s.chees);//必须先获取sum值s.sparse=new int[s.sum+1][3];s.cheestosparse(s.chees,s.sparse);System.out.println("得到的稀疏数组");s.printArray(s.sparse);s.chees2 = new int[s.sparse[0][0]][s.sparse[0][1]];s.sparse2chees(s.sparse,s.chees2);System.out.println("恢复后的二维数组");s.printArray(s.chees2);}}