二維數組與稀疏矩陣的互轉
- 2020 年 3 月 11 日
- 筆記
- 應用: 五子棋棋盤的棋子的存檔問題
- 思路構圖:

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]; //設置行和列並且賦值 } // 輸出稀疏矩陣轉二維數組