Java数据结构与算法-稀疏数组

public class sparseArray{
	public static void main(String args[]){
		/*  原始矩阵6*6
			0 0 0 0 0 0 
			0 2 0 0 3 0
			0 0 0 0 0 1
			0 0 0 0 1 0
			0 0 0 0 0 0 
			0 0 0 0 0 0
		*/
		/*稀疏矩阵
			6 6 4   (第一列记录原始二维数组的行列数和数组中的有效数据个数)
			1 1 2   (有效数据所在的行、列和数值)
			1 4 3
			2 5 1
			3 4 1
		*/
		int array[][]=new int[6][6];
		array[1][1]=2;
		array[1][4]=3;
		array[2][5]=1;
		array[3][4]=1;
		System.out.println("原始的二维数组");
		for(int[] row : array){
			for(int data : row){
				System.out.printf("%d\t",data);
			}
			System.out.println();
		}
		/*遍历数组得到数组中的有效数据个数*/
		int sum=0;
		for(int i=0;i<6;i++){
			for(int j=0;j<6;j++){
				if(array[i][j]!=0)
					sum++;
			}
		}
		/*创建稀疏数组*/
		int spArray[][]=new int[sum+1][3];
		int n=1; //稀疏数组的下标
		spArray[0][0]=6;
		spArray[0][1]=6;
		spArray[0][2]=sum;
		for(int i=0;i<6;i++){
			for(int j=0;j<6;j++){
				if(array[i][j]!=0){
					spArray[n][0]=i;
					spArray[n][1]=j;
					spArray[n][2]=array[i][j];
					n++;
				}
			}
		}
		System.out.println("/*转化而成的稀疏数组*/");
		for(int i=0;i<sum+1;i++){
			for(int j=0;j<3;j++){
				System.out.print(spArray[i][j]);
			}
			System.out.println();

		}
		/*稀疏数组还原二维数组*/
		int row=spArray[0][0];//行
		int column=spArray[0][1];//列
		int counter=1;
		int Array[][]=new int[row][column];
		for(int num=1;num<=spArray[0][2];num++){
			Array[spArray[num][0]][spArray[num][1]]=spArray[num][2];
		}
		/*输出还原后的二维数组*/
		System.out.println("输出还原后的二维数组");
		for(int i=0;i<row;i++ ){
			for(int j=0;j<column;j++){
				System.out.print(Array[i][j]);
			}
			System.out.println();
		}

	}
}

你可能感兴趣的:(数据结构与算法)