稀疏数组


public class SparseArray {
public static void main(String[] args) {
//创建棋盘
int[][] map = new int[11][11];
map[1][2] = 1;
map[2][3] = 2;
print(map);
//转稀疏数组
int[][] sparseArray = toSparseArray(map);
print(sparseArray);
//将稀疏数组还原
print(toMap(sparseArray));
}
public static void print(int[][] map) {
for (int x = 0; x < map.length; x++) {
for (int y = 0; y < map[x].length; y++) {
System.out.print(map[x][y] + " ");
}
System.out.println();
}
}
//创建稀疏数组
public static int[][] toSparseArray(int[][] map) {
//遍历棋盘
int n = 0;
for (int x = 0; x < map.length; x++) {
for (int y = 0; y < map[x].length; y++) {
if (map[x][y] != 0) {
n++;
}
}
}
//创建稀疏数组
int[][] sparseArray = new int[n + 1][3];
sparseArray[0][0] = map.length;
sparseArray[0][1] = map[1].length;
sparseArray[0][2] = n;
int i = 1;//记录存在稀疏数组的几行
for (int x = 0; x < map.length; x++) {
for (int y = 0; y < map[x].length; y++) {
if (map[x][y] != 0) {
sparseArray[i][0] = x;
sparseArray[i][1] = y;
sparseArray[i][2] = map[x][y];
i++;
}
}
}
return sparseArray;
}
//将稀疏数组还原
public static int[][] toMap(int[][] sparseArray) {
int[][] map = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++) {
map[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
return map;
}
}
队列















