直接看下面的程序代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
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]));
}
}
} |
执行结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[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] |
本文转自 xpleaf 51CTO博客,原文链接:http://blog.51cto.com/xpleaf/1976965,如需转载请自行联系原作者