object SparseArray {
def getSparseArray(arr: Array[Array[Int]]): Array[Array[Int]] = {
var sum = 0
for (elem <- arr) {
for (e <- elem) {
if(e != 0) sum+=1
}
}
val sparseArray = Array.ofDim[Int](sum + 1, 3)
sparseArray(0)=Array(arr.length,arr(0).length,sum)
var count = 1
for (i <- arr.indices) {
for (j <- arr(0).indices){
if(arr(i)(j) != 0){
sparseArray(count) = Array(i,j,arr(i)(j))
count += 1
}
}
}
sparseArray
}
def backFromSparse(sparseArr: Array[Array[Int]]): Array[Array[Int]]= {
val row = sparseArr(0)(0)
val col = sparseArr(0)(1)
val arr = Array.ofDim[Int](row, col)
for (i <- 1 until sparseArr.length){
arr(sparseArr(i)(0))(sparseArr(i)(1))=sparseArr(i)(2)
}
arr
}
def printArr(arr: Array[Array[Int]],seq: String = " ") = {
for (elem <- arr) {
for (e <- elem) {
print(e+seq)
}
println()
}
}
def main(args: Array[String]): Unit = {
val arr = Array.ofDim[Int](11, 11)
arr(1)(2)=4
arr(2)(3)=2
println("原数组如下")
printArr(arr)
val sparseArr = getSparseArray(arr)
println("稀疏数组如下")
printArr(sparseArr,"\t")
val arr2 = backFromSparse(sparseArr)
println("稀疏数组转换后:")
printArr(arr2)
}
}