package com.liu.arrray;
//稀疏数组
/*下面为一个棋盘0代表没有棋子,1代表白棋,2代表黑棋
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 2 0
*/
/*将上面棋盘变为稀疏数组
行 列 值
[0] 4 6 2
[1] 1 2 1
[2] 3 4 2
*/
public class Demo02 {
public static void main(String[] args) {
//创建一个四行六列的原始二维数组array1
int[][] array1=new int[4][6];
array1[1][2]=1;
array1[3][4]=2;
//输出原始数组
System.out.println("输出原始数组:");
for (int[] ints : array1) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println("");
}
System.out.println("========================");
System.out.println("========================");
//将原始数组变为稀疏数组,然后打印出来
//获取有效值的个数
int sum=0;
for (int i = 0; i <4; i++) {
for (int j = 0; j <6; j++) {
if(array1[i][j]!=0){
sum+=1;
}
}
}
System.out.println("有效值的个数为:"+sum);
//创建一个稀疏数组array2
int[][] array2=new int[sum+1][3];
array2[0][0]=4;
array2[0][1]=6;
array2[0][2]=sum;
//遍历二维数组array1,将非零的值存放在稀疏数组array2
int count=0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 6; j++) {
if(array1[i][j]!=0){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=array1[i][j];
}
}
}
//打印稀疏数组
System.out.println("输出稀疏数组为:");
for (int i = 0; i < sum+1; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(array2[i][j]+"\t");
}
System.out.println("");
}
System.out.println("========================");
System.out.println("========================");
//将稀疏数组转换为原始数组,
//创建原始数组array3
int[][] array3=new int[array2[0][0]][array2[0][1]];
for (int i = 1; i < sum+1; i++) {
array3[array2[i][0]][array2[i][1]]=array2[i][2];
}
//打印原始数组
System.out.println("原始数组为:");
for (int[] ints : array3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println("");
}
}
}
输出结果: