1. 稀疏数组介绍
- 当一个数组中 , 大部分元素为0 , 或者为同一个值的数组时
- 可以使用稀疏数组
2. 五子棋盘案例
- 正常情况:
- 稀疏数组情况:
代码示例: E:\案例\数据结构-算法\src\main\java\com\h\五子棋 ```java public class text { //创建一个 11*11 的二维数组 public static int[][] checkerboard = new int[11][11];
//下棋方法 public static void run(int row,int col,int value){
checkerboard[row][col] = value;
}
//打印棋盘 public static void sout(int[][] array){
System.out.println("------------------------------------------------------"); for (int[] ints : array) { for (int anInt : ints) { System.out.print(anInt+" "); } System.out.println(""); }
}
//判断数组是否需要扩展 public static int[][] ifArraryExtend(int row ,int[][] sparseArrary){
int[][] sparseArrary2 = new int[row+1][3]; if(sparseArrary.length >= row){ for (int i = 0; i < sparseArrary.length; i++) { sparseArrary2[i] = sparseArrary[i]; } } return sparseArrary2;
}
//转化为稀疏数组 public static int[][] conversionSparseArrary(int[][] checkerboard){
//记录非0的个数 int sum = 0; int[][] sparseArrary = new int[1][3]; sparseArrary[0][0] = checkerboard.length; sparseArrary[0][1] = checkerboard[0].length; sparseArrary[0][2] = 0; //转化 for (int i=1;i<checkerboard.length;i++){ for (int j =0;j<checkerboard[0].length;j++){ if(checkerboard[i][j] != 0 ){ sum++; sparseArrary = ifArraryExtend(sum,sparseArrary); sparseArrary[sum][0] = i; sparseArrary[sum][1] = j; sparseArrary[sum][2] = checkerboard[i][j]; } } } sparseArrary[0][2] = sum; return sparseArrary;
}
//转化为二维数组 public static int[][] conversionCheckerboardArrary(int[][] sparseArrary){
int[][] checkerboard = new int[sparseArrary[0][0]][sparseArrary[0][1]]; for (int i = 1; i <= sparseArrary[0][2]; i++) { checkerboard[sparseArrary[i][0]][sparseArrary[i][1]] = sparseArrary[i][2]; } return checkerboard;
}
public static void main(String[] args) throws Exception{
run(4,6,1);
run(5,7,2);
sout(checkerboard);
int[][] sparseArrary= conversionSparseArrary(checkerboard);
sout(sparseArrary);
//存储
IOUtil.writeObject(sparseArrary , "C:\\Users\\T440P\\Desktop\\a.txt");
//读取
Object o = IOUtil.readObject("C:\\Users\\T440P\\Desktop\\a.txt");
int[][] array = (int[][]) o;
sout(array);
int[][] ints = conversionCheckerboardArrary(sparseArrary);
sout(ints);
}
} ```