package DataStructure;
public class SparseArrays {
public static void main(String[] args) {
// 有一个10*10的棋盘,在(0,1)和(1,2)位置分别有一个黑棋和白棋,将这个
// 棋盘用二维数组表示出来,再将其转换为稀疏数组,最后转换回二维数组
int Array[][] = new int[10][10];
Array[0][1] = 1; //用1表示黑棋,2表示白棋
Array[1][2] = 2;
System.out.println("---------二维数组---------");
for (int[] row : Array){
for (int data:row){
System.out.print(data+"\t");
}
System.out.println();
}
int number = 0; //统计非零的个数
for (int[] row : Array){
for (int data : row){
if (data != 0){
number ++;
}
}
}
int sparseArray[][] = new int[number+1][3];
sparseArray[0][0] = 10;
sparseArray[0][1] = 10;
sparseArray[0][2] = number;
int index = 1;
for (int i = 0 ; i < 10 ; i ++){
for (int j = 0 ; j < 10 ; j ++){
if (Array[i][j] != 0){
sparseArray[index][0] = i;
sparseArray[index][1] = j;
sparseArray[index][2] = Array[i][j];
index ++;
}
}
}
System.out.println("---------稀疏数组---------");
for (int[] row : sparseArray){
for (int data : row){
System.out.print(data + "\t");
}
System.out.println();
}
System.out.println("---------转换为二维数组---------");
int length = sparseArray[0][0];
int width = sparseArray[0][1];
int T = sparseArray[0][2];
int Array1[][] = new int[length][width];
for (int i = 1 ; i <= T ; i ++){
int x = sparseArray[i][0];
int y = sparseArray[i][1];
int val = sparseArray[i][2];
Array1[x][y] = val;
}
for (int[] row : Array1){
for (int data : row){
System.out.print(data + "\t");
}
System.out.println();
}
}
}
运行,得到结果
---------二维数组---------
0 1 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
---------稀疏数组---------
10 10 2
0 1 1
1 2 2
---------转换为二维数组---------
0 1 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0