稀疏数组
实际需求: 五子棋程序中的存盘和读盘的功能 数组变稀疏数组 转换思路 二维数组变为稀疏数组: 1. 遍历原始的二维数组,得到有效的数据的个数sum 2. 根据sum创建稀疏数组 sparseArr int[sum+1][3]
3. 将二维数组的有效数据存入稀疏数组中 稀疏数组变为原始二维数组思路 1. 先读取二维数组的第一行,创建原始数组 2. 读取稀疏数组的后几行数据,并赋值给原始二维数组即可 代码
public class SparseArray {
public static void main ( String [ ] args) {
int chessArr1[ ] [ ] = new int [ 11 ] [ 11 ] ;
chessArr1[ 1 ] [ 2 ] = 1 ;
chessArr1[ 2 ] [ 3 ] = 2 ;
System . out. println ( "原始二维数组:" ) ;
for ( int [ ] row : chessArr1) {
for ( int data : row) {
System . out. printf ( "%d\t" , data) ;
}
System . out. println ( ) ;
}
System . out. println ( "变为稀疏数组:" ) ;
toSparseArray ( chessArr1) ;
}
public static void toSparseArray ( int [ ] [ ] OriginalArray ) {
int sum = 0 ;
for ( int [ ] row : OriginalArray ) {
for ( int data : row) {
if ( data != 0 ) {
sum++ ;
}
}
}
int sparseArray[ ] [ ] = new int [ sum + 1 ] [ 3 ] ;
sparseArray[ 0 ] [ 0 ] = OriginalArray . length;
sparseArray[ 0 ] [ 1 ] = OriginalArray [ 0 ] . length;
sparseArray[ 0 ] [ 2 ] = sum;
int count = 0 ;
for ( int i = 0 ; i < OriginalArray . length; i++ ) {
for ( int j = 0 ; j < OriginalArray [ 0 ] . length; j++ ) {
if ( OriginalArray [ i] [ j] != 0 ) {
count++ ;
sparseArray[ count] [ 0 ] = i;
sparseArray[ count] [ 1 ] = j;
sparseArray[ count] [ 2 ] = OriginalArray [ i] [ j] ;
}
}
}
for ( int [ ] row : sparseArray) {
for ( int data : row) {
System . out. printf ( "%d\t" , data) ;
}
System . out. println ( ) ;
}
System . out. println ( "变为原始数组:" ) ;
toOriginalArray ( sparseArray) ;
}
public static void toOriginalArray ( int [ ] [ ] SparseArray ) {
int OriginalArray [ ] [ ] = new int [ SparseArray [ 0 ] [ 0 ] ] [ SparseArray [ 0 ] [ 1 ] ] ;
for ( int count = 0 ; count < SparseArray [ 0 ] [ 2 ] ; count++ ) {
OriginalArray [ SparseArray [ count + 1 ] [ 0 ] ] [ SparseArray [ count + 1 ] [ 1 ] ] = SparseArray [ count + 1 ] [ 2 ] ;
}
for ( int [ ] row : OriginalArray ) {
for ( int data : row) {
System . out. printf ( "%d\t" , data) ;
}
System . out. println ( ) ;
}
}
}