稀疏矩阵
稀疏矩阵
因为二维数组很多值默认为零,因此记录了很多没有意义的数据。
使用二维数组(三元组)来解决这种问题
源代码
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
// 创建二维数组 11*11 0没有棋子, 1为黑棋 2为白棋
int[][] a = new int[11][11];
a[1][2] = 1;
a[2][3] = 2;
//输出原始数组(增强型数组方法)
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
System.out.println("=============================");
//转换为稀疏数组
//统计三元组里有效元素个数
int sum = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
if (a[i][j]>0)
{
sum++;
}
}
}
System.out.println("有效值的个数: " + sum);
//创建一个稀疏数组的数组
int [][] a2 = new int[sum+1][3];
a2[0][0] = a.length; //第一个数是行数
a2[0][1] = a[0].length; //第二个数是列数
a2[0][2] = sum; //有效元素的个数
//遍历二维数组,将非零值存放在稀疏数组中
int count = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
if (a[i][j] > 0)
{
count++; //遍历到有效值就跳转到行
a2[count][0] = i;//行
a2[count][1] = j;//列
a2[count][2] = a[i][j];//元素值
}
}
}
//输出稀疏矩阵(使用Arrays工具类的toString方法)
for (int i = 0; i < a2.length; i++) {
System.out.println(Arrays.toString(a2[i]));
}
System.out.println("=============================");
//还原稀疏矩阵
//读取稀疏矩阵
int a3[][] = new int[a2[0][0]][a2[0][1]];//用稀疏矩阵的第一行 也就是存原数组的行和列的数量来定义原数组大小
//给原数组还原他的值
for (int i = 1; i < a2.length; i++) {
a3[ a2[i][0] ][ a2[i][1] ]=a2[i][2]; // 行列值
}
//输出还原数组
for (int[] ints : a3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}