您的位置:首页 > 理论基础 > 数据结构算法

【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)

2017-10-28 10:04 791 查看
直接看下面的程序代码:

package chapter02;

import java.util.Arrays;

/*
* 稀疏矩阵压缩(简单版)
*/
public class CH02_05 {
public static void main(String[] args) {
//定义一个稀疏矩阵
int[][] arr =
{
{25, 0, 0, 32, 0, -25},
{0, 33, 77, 0, 0, 0},
{0, 0, 0, 55, 0, 0},
{0, 0, 0, 0, 0, 0},
{101, 0, 0, 0, 0, 0},
{0, 0, 38, 0, 0, 0}
};

//输出稀疏矩阵
for(int i = 0; i < arr.length; i++){
System.out.println(Arrays.toString(arr[i]));
}

//压缩稀疏矩阵的准备工作
int rows = arr.length;		//稀疏矩阵的行
int cols = arr[0].length;	//稀疏矩阵的列
int real = 0;				//稀疏矩阵非0元素
//遍历获取稀疏矩阵的非0元素个数
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
if(arr[i][j] != 0){
real += 1;
}
}
}
//定义一个数组,用来保存压缩后的稀疏矩阵
int[][] arrResult = new int[real+1][3];
//初始化arrResult
for(int i = 0; i < arrResult.length; i++){
Arrays.fill(arrResult[i], 0);
}
//在arrResult中保存稀疏矩阵的基本信息
//arrResult[0][0]:稀疏矩阵的行数	arrResult[0][1]:稀疏矩阵的列数		arrResult[0][2]:稀疏矩阵非0元素个数
arrResult[0][0] = rows;
arrResult[0][1] = cols;
arrResult[0][2] = real;
//输出初始化后的arrResult
System.out.println();
for(int i = 0; i < arrResult.length; i++){
System.out.println(Arrays.toString(arrResult[i]));
}

//开始压缩稀疏矩阵
int k = 1;	//用来记录arrResult到第几行,因为第0行已经用来保存基本信息,所以从第1行开始
for(int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
if(arr[i][j] != 0){
arrResult[k][0] = i;
arrResult[k][1] = j;
arrResult[k][2] = arr[i][j];
k++;
}
}
}

//输出压缩后的稀疏矩阵
System.out.println();
for(int i = 0; i < arrResult.length; i++){
System.out.println(Arrays.toString(arrResult[i]));
}

}
}
执行结果如下:

[25, 0, 0, 32, 0, -25]
[0, 33, 77, 0, 0, 0]
[0, 0, 0, 55, 0, 0]
[0, 0, 0, 0, 0, 0]
[101, 0, 0, 0, 0, 0]
[0, 0, 38, 0, 0, 0]

[6, 6, 8]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]
[0, 0, 0]

[6, 6, 8]
[0, 0, 25]
[0, 3, 32]
[0, 5, -25]
[1, 1, 33]
[1, 2, 77]
[2, 3, 55]
[4, 0, 101]
[5, 2, 38]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 数组 数据结构
相关文章推荐