object RebuildSparseMatrix {
// A sparse matrix is a matrix in which the majority of elements are zero.
// To rebuild a sparse matrix from a compact (triplet) representation,
// we create a full matrix initialized with zeros, then place each
// non‑zero element at its (row, column) position.
// Build full sparse matrix from compact triplet form
def buildSparseFromCompact(compact: Array[Array[Int]], count: Int): Array[Array[Int]] = {
val rowIdx = compact(0)
val colIdx = compact(1)
val values = compact(2)
// Determine matrix dimensions automatically
var maxRow = 0
var maxCol = 0
for (i <- 0 until count) {
if (rowIdx(i) > maxRow) maxRow = rowIdx(i)
if (colIdx(i) > maxCol) maxCol = colIdx(i)
}
val rows = maxRow + 1
val cols = maxCol + 1
// Create full matrix initialized with zeros
val sparse = Array.fill(rows, cols)(0)
// Fill matrix
for (i <- 0 until count) {
sparse(rowIdx(i))(colIdx(i)) = values(i)
}
sparse
}
// Print a matrix
def printMatrix(mat: Array[Array[Int]], title: String): Unit = {
println(title)
mat.foreach { row =>
println(row.mkString(" "))
}
println()
}
def main(args: Array[String]): Unit = {
// Compact matrix:
// 0 0 1 1 1 3 3 3 4
// 2 4 2 3 6 1 2 5 4
// 3 8 5 7 1 2 6 4 9
val compact = Array(
Array(0, 0, 1, 1, 1, 3, 3, 3, 4), // row indices
Array(2, 4, 2, 3, 6, 1, 2, 5, 4), // column indices
Array(3, 8, 5, 7, 1, 2, 6, 4, 9) // values
)
val count = 9
println("Compact matrix:")
for (i <- 0 until 3) {
println(compact(i).take(count).mkString(" "))
}
println()
val sparse = buildSparseFromCompact(compact, count)
printMatrix(sparse, "Sparse matrix (auto-sized):")
}
}
/*
run:
Compact matrix:
0 0 1 1 1 3 3 3 4
2 4 2 3 6 1 2 5 4
3 8 5 7 1 2 6 4 9
Sparse matrix (auto-sized):
0 0 3 0 8 0 0
0 0 5 7 0 0 1
0 0 0 0 0 0 0
0 2 6 0 0 4 0
0 0 0 0 9 0 0
*/