###### tags: `實習額外加分題` 第九次實習課額外加分題 - 陣列練習 === > 此題來自東華資工系OJ > [歡迎點我去那邊玩玩!](http://134.208.3.66/problem/PR110-08-01) ## Description 如果在矩陣中,多數的元素並沒有資料,稱此矩陣為稀疏矩陣(sparse matrix),由於矩陣在程式中常使用二維陣列表示,二維陣列的大小與使用的記憶體空間成正比,如果多數的元素沒有資料,則會造成記憶體空間的浪費,為 此,必須設計稀疏矩陣的壓縮方式,利用較少的記憶體空間儲存完整的矩陣資訊。 在這邊所介紹的方法較為簡單,陣列只儲存矩陣的行數、列數與有資料的索引位置及其值,在需要使用矩陣資料時,再透過程式運算加以還原,例如若矩陣資料如下 ,其中0表示矩陣中該位置沒有資料: ``` 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 0 9 0 0 0 0 0 0 0 12 0 ``` 這個矩陣是5X6矩陣,非零元素有4個,您要使用的陣列第一列記錄其列數、行數與非零元素個數: ``` 5 6 4 ``` 陣列的第二列起,記錄其位置的列索引、行索引與儲存值: ``` row col val 1 1 3 2 3 6 3 2 9 4 4 12 ``` 所以原本要用30個元素儲存的矩陣資訊,現在壓縮到只使用了15個元素來儲存,節省了不少記憶體的使用。 請寫一個程式,輸入壓縮後的資料,將矩陣還原後輸出。 ## Constraint * 本來在筆記裡面跟你們說這樣寫是不好的。我舉個例,不管是二維或是一維。 ```cpp= int a = 0; cin >> a; int array[a]; ``` * 但因為還沒教你們動態配置陣列,所以我們就允許你偷吃步這樣做。至於這題要用一維還是二維,就麻煩自己動動腦瞜。 ## Sample Input 1 ``` 5 6 4 1 1 3 2 3 6 3 2 9 4 4 12 ``` ## Sample Output 1 ``` 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 6 0 0 0 0 9 0 0 0 0 0 0 0 12 0 ``` <!-- answer int main(){ int row = 0, col = 0, content = 0; int row_s = 0, col_s = 0, content_s; cin >> row >> col >> content; int arr[row][col] = {}; for(int i = 0; i < content; i++){ cin >> row_s >> col_s >> content_s; arr[row_s][col_s] = content_s; } for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ cout << arr[i][j] << " "; } cout << endl; } return 0; } -->