直接上代码
package baoxinhai_test_datastructure;
/*
* 二维数组和稀疏数组的转换
* @author bxh
*/
public class sparsearray {
public static void main(String[] args) {
int[][] chess=new int[6][6];
/*
* 棋盘中,1代表黑色的棋子,2代表蓝色的棋子,0代表没有棋子
*/
chess[1][2]=1;
chess[2][3]=2;
chess[3][5]=2;
System.out.println("原始的二维数组为:");
for(int[] rows:chess)
{
for(int value:rows )
System.out.printf("%d\t",value);
System.out.println();
}
int sum=0; //定义非0值的个数
System.out.println("将二维数组转换为稀疏数组为:");
//1.先遍历二维数组 得到非0的数据个数
//2.创建对应的稀疏数组
//3.输出对应的稀疏数组
//得到非0 的数据个数
for(int i=0;i<chess.length;i++) {
for(int j=0;j<chess[0].length;j++)
{
if(chess[i][j]!=0)
{
sum++;
}
}
}
//System.out.println(sum);
//创建相应的稀疏数组
int[][] sparseArray=new int[sum+1][3];
sparseArray[0][0]=chess.length;
sparseArray[0][1]=chess[0].length;
sparseArray[0][2]=sum;
int count=1; //初始化相应的第几个值插入数组中
for(int i=0;i<chess.length;i++) {
for(int j=0;j<chess[0].length;j++)
{
if(chess[i][j]!=0)
{
sparseArray[count][0]=i;
sparseArray[count][1]=j;
sparseArray[count][2]=chess[i][j];
count++;
}
}
}
//输出对应的稀疏数组
for(int i=0;i<sparseArray.length;i++)
{
System.out.printf("%d\t%d\t%d",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);
System.out.println();
}
//将稀疏数组恢复为二维数组
int[][] chessArr=new int[sparseArray[0][0]][sparseArray[0][1]];
for(int i=1;i<sparseArray.length;i++)
{
chessArr[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
}
System.out.println("输出由稀疏数组转为的二维数组:");
for(int[] row:chessArr) {
for(int value:row)
{
System.out.printf("%d\t",value);
}
System.out.println();
}
}
}