二维数组与稀疏矩阵的互转
- 2020 年 3 月 11 日
- 筆記
- 应用: 五子棋棋盘的棋子的存档问题
- 思路构图:
![](https://ask.qcloudimg.com/http-save/6834658/c3a84dmk3w.jpeg)
xishu.jpg
- SparseArray.java 运行结果
原始数组: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 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 0 0 0 0 0 0 0 0 非0数据的总数为sum=2 原始二维数组转换的稀疏矩阵为: 11 11 2 1 2 1 2 3 2 稀疏矩阵转二维数组的结果为: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 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 0 0 0 0 0 0 0 0
下面是源代码
java package cn.allms.sparseArray; /** * 稀疏矩阵与二维数组的转化 * @author QFMX * */ public class SparseArray { public static void main(String[] args) { // 创建数组 int[][] arr1 = new int[11][11]; // 初始化数组,给数组赋值,0代表无子,1代表黑子,2代表蓝子 arr1[1][2] = 1; arr1[2][3] = 2; // 遍历数组生成棋盘 System.out.println("原始数组:"); for (int[] row : arr1) { for (int i : row) { System.out.printf(i + " "); } System.out.println(); } // 二维数组转稀疏矩阵 // 1. 获取需要生成稀疏矩阵的行的总数:非0数据的总数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (arr1[i][j] != 0) { sum += 1; } } } System.out.println("非0数据的总数为sum=" + sum); // 2. 创建稀疏矩阵 int sparseArr[][] = new int[sum + 1][3]; // 3. 初始化稀疏矩阵的第一行: 原始二维数组的 行 列 非0数据的个数 sparseArr[0][0] = 11; // 行 sparseArr[0][1] = 11; // 列 sparseArr[0][2] = sum; // 非0数据的个数 // 4. 使用for遍历二维数组出非0数据赋值给稀疏矩阵 int count = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (arr1[i][j] != 0) { // 找到了元数组的非0数据,然后开始赋值 count++; // 找到了非0数据,用于更新稀疏矩阵的行 sparseArr[count][0] = i; // 原来二维数组的行标 sparseArr[count][1] = j; // 原二维数组的列标 sparseArr[count][2] = arr1[i][j]; // 原二维数组的数据 } } } // 5. 输出稀疏矩阵 System.out.println("原始二维数组转换的稀疏矩阵为:"); // 遍历数组 for (int i = 0; i < sparseArr.length; i++) { for (int j = 0; j < sparseArr.length; j++) { System.out.printf(sparseArr[i][j] + "t"); } System.out.println(); } // 稀疏据矩阵转原始二维数组 // 1. 根据稀疏矩阵的第一行数据创建原始二维数组 int row = sparseArr[0][0]; int col = sparseArr[0][1]; // 2. 创建二维数组 int arr2[][] = new int[row][col]; // 3. 读取稀疏矩阵为创建二维数组赋值 for (int i = 1; i < sparseArr.length; i++) { int r = sparseArr[i][0]; //获取行标 int c = sparseArr[i][1]; //获取列表 arr2[r][c] = sparseArr[i][2]; //设置行和列并且赋值 } // 输出稀疏矩阵转二维数组