什么是稀疏矩阵
-
第一行记录数组有几行几列,有多少个不同的值
-
把具有不同值的元素的行列及值记录在一个小规模的数组中,从二缩小程序的规模.
若二维数组中有n个有效数据,则稀疏矩阵有n+1行,3lie
什么时候要用到稀疏数组.
在二维数组中有许多无效数据时,就会用到稀疏数组
例如:在一个五子棋盘上有两颗棋子,第一颗为白棋在(2,4)的位置,第二颗为黑棋在(3,5)的位置,
棋盘为10*10的正方形棋盘,让你用二维数组去保存这盘棋,其中白棋为1,黑棋为2,没有棋的地方为0
这时如果用二维数组存储,需要存储100个数字,
但是用稀疏矩阵只需要九个数据
代码
代码实现
public class sparse {
public static void main(String[] args) {
//定义一个flag用于记录有几个不为零的数
int flag = 0;
//定义棋盘的二维数组,其中1表示黑子,2表示蓝子
int[][] arr = new int[11][11];
arr[1][2] = 1;
arr[2][3] = 2;
//打印输出初始数组
System.out.println("原始的二维数组:");
for(int[] row : arr){
for(int data : row){
if(data != 0){
flag++;
}
System.out.printf("%d\t",data);
}
System.out.println(" ");
}
//定义稀疏数组
int[][] sparsearray = new int[flag + 1][3];
//将二维数组中的数据存入第一行
sparsearray[0][0] = arr.length;
sparsearray[0][1] = arr[1].length;
sparsearray[0][2] = flag;
//定义一个浮标记录加载到第几行
int i = 1;
//定义一个循环将不为零的数据的信息放入稀疏数组
for (int j = 0; j < arr.length; j++) {
for (int k = 0; k < arr[j].length; k++) {
if(arr[j][k] != 0){
sparsearray[i][0] = j;
sparsearray[i][1] = k;
sparsearray[i][2] = arr[j][k];
i++;
}
}
}
System.out.println("转换后的稀疏数组为:");
//打印稀疏数组
System.out.println("row" + '\t' + "col" + '\t' + "vul");
for(int[] xal : sparsearray){
for (int data : xal){
System.out.printf("%d\t", data);
}
System.out.println(" ");
}
}
}
运行结果:
原始的二维数组:
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
转换后的稀疏数组为:
row col vul
11 11 2
1 2 1
2 3 2