xishu.jpg
原始数组:
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]; //设置行和列并且赋值
}
// 输出稀疏矩阵转二维数组