using System;
class 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
static int[,] BuildSparseFromCompact(int[,] compact, int count)
{
int[] rowIdx = new int[count];
int[] colIdx = new int[count];
int[] values = new int[count];
for (int i = 0; i < count; i++) {
rowIdx[i] = compact[0, i];
colIdx[i] = compact[1, i];
values[i] = compact[2, i];
}
// Determine matrix dimensions automatically
int maxRow = 0;
int maxCol = 0;
for (int i = 0; i < count; i++) {
if (rowIdx[i] > maxRow) maxRow = rowIdx[i];
if (colIdx[i] > maxCol) maxCol = colIdx[i];
}
int rows = maxRow + 1;
int cols = maxCol + 1;
// Create full matrix initialized with zeros
int[,] sparse = new int[rows, cols];
// Fill matrix
for (int i = 0; i < count; i++) {
sparse[rowIdx[i], colIdx[i]] = values[i];
}
return sparse;
}
// Print a matrix
static void PrintMatrix(int[,] mat, string title)
{
Console.WriteLine(title);
int rows = mat.GetLength(0);
int cols = mat.GetLength(1);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++)
Console.Write(mat[i, j] + " ");
Console.WriteLine();
}
Console.WriteLine();
}
static void Main()
{
// 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
int[,] compact =
{
{0, 0, 1, 1, 1, 3, 3, 3, 4}, // row indices
{2, 4, 2, 3, 6, 1, 2, 5, 4}, // column indices
{3, 8, 5, 7, 1, 2, 6, 4, 9} // values
};
Console.WriteLine("Compact matrix:");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++)
Console.Write(compact[i, j] + " ");
Console.WriteLine();
}
Console.WriteLine();
int[,] sparse = BuildSparseFromCompact(compact, 9);
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
*/