#include<stdio.h>
#include<stdlib.h>
Sparse_print(int m, int n, int Sparse[m][n])
{
int i, j;
for(i = 0; i < m; i++){
for(j = 0; j < n; j++)
}
}
//壓縮處理
Compress_process(int m, int n, int Sparse[m][n], int Compress[m][n])
{
int i,j,k;
k = 1; // 設定變數初值
Compress[0][0] = m; // 陣列sparse有m列
Compress[0][1] = n; // 陣列sparse有n行
Compress[0][2] = 5; // 陣列使用5個元素
for ( i = 0; i < m; i++ ) // 二維陣列的走訪
for ( j = 0; j < n; j++ )
if ( Sparse[i][j] != 0 ) // 判斷是否為非0元素
{
Compress[k][0] = i; // 儲存列數
Compress[k][1] = j; // 儲存行數
//儲存元素值
Compress[k][2] = Sparse[i][j];
k++; // 下一列
}
}
//輸出壓縮結果
Compress_print(int m, int n, int Compress[m][n])
{
int i, j;
for(i = 0; i < m; i++){
for(j = 0; j < n; j++)
printf("%3d ", Compress
[i
][j
]); }
}
main()
{
int Sparse[4][3] = {{5, 0, 0}, {0, 0, -1}, {3, 0, 0}, {0, 9, 10}};
int Compress[6][3];
//兩個矩陣相加
printf("===============程式描述=======================\n"); printf("= 程式名稱:ch3-7.4.c =\n"); printf("= 程式目的:將一稀疏矩陣轉換成壓縮的表示法 =\n"); printf("==============================================\n"); Sparse_print(4,3,Sparse); //輸入稀疏矩陣
Compress_process(4, 3, Sparse, Compress); //壓縮處理
Compress_print(6, 3, Compress); //輸出壓縮結果
return(0);
}
//輸出稀疏矩陣
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgpTcGFyc2VfcHJpbnQoaW50IG0sIGludCBuLCBpbnQgU3BhcnNlW21dW25dKQp7CiAgICAgcHJpbnRmKCLovLjlhaXnqIDnlo/nn6npmaPvvJoiKTsKICAgICBwcmludGYoIlxuIik7ICAgICAgICAgICAgICAgICAgICAgCiAgICAgaW50IGksIGo7CiAgICAgZm9yKGkgPSAwOyBpIDwgbTsgaSsrKXsKICAgICAgIGZvcihqID0gMDsgaiA8IG47IGorKykKICAgICAgICAgcHJpbnRmKCIlM2QgIiwgU3BhcnNlW2ldW2pdKTsKICAgICAgIHByaW50ZigiXG4iKTsKICAgICB9Cn0KCi8v5aOT57iu6JmV55CGIApDb21wcmVzc19wcm9jZXNzKGludCBtLCBpbnQgbiwgaW50IFNwYXJzZVttXVtuXSwgaW50IENvbXByZXNzW21dW25dKQp7CiAgIGludCBpLGosazsKICAgayA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6Kit5a6a6K6K5pW45Yid5YC8ICAgICAKICAgQ29tcHJlc3NbMF1bMF0gPSBtOyAgICAgICAgICAgICAgICAgLy8g6Zmj5YiXc3BhcnNl5pyJbeWIlyAgCiAgIENvbXByZXNzWzBdWzFdID0gbjsgICAgICAgICAgICAgICAgIC8vIOmZo+WIl3NwYXJzZeaciW7ooYwgCiAgIENvbXByZXNzWzBdWzJdID0gNTsgICAgICAgICAgICAgICAgIC8vIOmZo+WIl+S9v+eUqDXlgIvlhYPntKAgIAogICBmb3IgKCBpID0gMDsgaSA8IG07IGkrKyApICAgICAgICAgICAvLyDkuozntq3pmaPliJfnmoTotbDoqKogICAKICAgICAgZm9yICggaiA9IDA7IGogPCBuOyBqKysgKQogICAgICAgICBpZiAoIFNwYXJzZVtpXVtqXSAhPSAwICkgICAgICAvLyDliKTmlrfmmK/lkKbngrrpnZ4w5YWD57SgICAgCiAgICAgICAgIHsKICAgICAgICAgICAgQ29tcHJlc3Nba11bMF0gPSBpOyAgICAvLyDlhLLlrZjliJfmlbggICAgICAgICAKICAgICAgICAgICAgQ29tcHJlc3Nba11bMV0gPSBqOyAgICAvLyDlhLLlrZjooYzmlbggICAgICAgICAKICAgICAgICAgICAgLy/lhLLlrZjlhYPntKDlgLwKICAgICAgICAgICAgQ29tcHJlc3Nba11bMl0gPSBTcGFyc2VbaV1bal07CiAgICAgICAgICAgIGsrKzsgICAgICAgICAgICAgICAgICAgLy8g5LiL5LiA5YiXICAgICAgICAgICAKICAgICAgICAgfQp9CgovL+i8uOWHuuWjk+e4rue1kOaenApDb21wcmVzc19wcmludChpbnQgbSwgaW50IG4sIGludCBDb21wcmVzc1ttXVtuXSkKewogICAgIHByaW50Zigi6Ly45Ye65aOT57iu57WQ5p6c77yaIik7CiAgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAKICAgICBpbnQgaSwgajsKICAgICBmb3IoaSA9IDA7IGkgPCBtOyBpKyspewogICAgICAgZm9yKGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICBwcmludGYoIiUzZCAiLCBDb21wcmVzc1tpXVtqXSk7CiAgICAgICBwcmludGYoIlxuIik7CiAgICAgfQp9Cm1haW4oKQp7CiAgICAgaW50IFNwYXJzZVs0XVszXSA9IHt7NSwgMCwgMH0sIHswLCAwLCAtMX0sIHszLCAwLCAwfSwgezAsIDksIDEwfX07CiAgICAgaW50IENvbXByZXNzWzZdWzNdOwogICAgIAogICAgIC8v5YWp5YCL55+p6Zmj55u45YqgIAogICAgIHByaW50ZigiPT09PT09PT09PT09PT0956iL5byP5o+P6L+wPT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwogICAgIHByaW50ZigiPSDnqIvlvI/lkI3nqLHvvJpjaDMtNy40LmMgICAgICAgICAgICAgICAgICAgICAgICA9XG4iKTsKICAgICBwcmludGYoIj0g56iL5byP55uu55qE77ya5bCH5LiA56iA55aP55+p6Zmj6L2J5o+b5oiQ5aOT57iu55qE6KGo56S65rOVICAgPVxuIik7IAogICAgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7IAogICAgIFNwYXJzZV9wcmludCg0LDMsU3BhcnNlKTsgICAgICAgICAgICAgICAgICAgICAgLy/ovLjlhaXnqIDnlo/nn6npmaMKICAgICBDb21wcmVzc19wcm9jZXNzKDQsIDMsIFNwYXJzZSwgQ29tcHJlc3MpOyAgICAgIC8v5aOT57iu6JmV55CGIAogICAgIENvbXByZXNzX3ByaW50KDYsIDMsIENvbXByZXNzKTsgICAgICAgICAgICAgICAgLy/ovLjlh7rlo5PnuK7ntZDmnpwgCiAgICAgc3lzdGVtKCJQQVVTRSIpOwogICAgIHJldHVybigwKTsKfQovL+i8uOWHuueogOeWj+efqemZowo=