#include <iostream>
using namespace std;
int main()
{
int sparse1[10][3],sparse2[10][3],sum[10][3];
int m,n,p,q,t1,t2,s,element;
int i,j;
cout<<"Enter the number of rows and columns : ";
cin>>m>>n;
t1=t2=0;
cout<<"\nEnter the first matrix("<<m<<"*"<<n<<"):\n";
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
cin>>element;
if(element!=0)
{
t1=t1+1;
sparse1[t1][1]=i;
sparse1[t1][2]=j;
sparse1[t1][3]=element;
}
}
}
sparse1[0][1]=m;
sparse1[0][2]=n;
sparse1[0][3]=t1;
cout<<"\nEnter the second matrix("<<m<<"*"<<n<<"):\n";
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
cin>>element;
if(element!=0)
{
t2=t2+1;
sparse2[t2][1]=i;
sparse2[t2][2]=j;
sparse2[t2][3]=element;
}
}
}
sparse2[0][1]=m;
sparse2[0][2]=n;
sparse2[0][3]=t2;
// displaying the first sparse matrix
cout<<"\n\nThe first sparse matrix is :\n\nRow\tColumn\tElement";
cout<<"\n-----------------------\n";
for(i=0;i<=t1;i++)
{
cout<<sparse1[i][1]<<"\t"<<sparse1[i][2]<<"\t"<<sparse1[i][3]<<"\n";
}
// displaying the second sparse matrix
cout<<"\n\nThe second sparse matrix is :\n\nRow\tColumn\tElement";
cout<<"\n-----------------------\n";
for(i=0;i<=t2;i++)
{
cout<<sparse2[i][1]<<"\t"<<sparse2[i][2]<<"\t"<<sparse2[i][3]<<"\n";
}
// Addition and subtraction
i=j=s=1;
while((i<=t1)&&(j<=t2))
{
if(sparse1[i][1]==sparse2[j][1]) // if rows are equal
{
if(sparse1[i][2]==sparse2[j][2]) // if columns are equal
{
sum[s][1]=sparse1[i][1];
sum[s][2]=sparse1[i][2];
sum[s][3]=sparse1[i][3]+sparse2[j][3];
i++;
j++;
if(sum[s][3]!=0)
s++;
}
}
}
} // end of while
if(i<=t1)
{
for(p=i;p<=t1;p++)
{
sum[s][1]=sparse1[p][1];
sum[s][2]=sparse1[p][2];
sum[s][3]=sparse1[p][3];
s++;
}
}
else if(j<=t2)
{
for(p=j;p<=t2;p++)
{
sum[s][1]=sparse2[p][1];
sum[s][2]=sparse2[p][2];
sum[s][3]=sparse2[p][3];
diff[d][3]=0-sparse2[j][3];
s++;
}
}
// end of addition and subtraction
sum[0][1]=m;
sum[0][2]=n;
sum[0][3]=s-1;
// displaying the sum matrix
cout<<"\n\nThe sum is :\n\nRow\tColumn\tElement";
cout<<"\n-----------------------\n";
for(i=0;i<s;i++)
{
cout<<sum[i][1]<<"\t"<<sum[i][2]<<"\t"<<sum[i][3]<<"\n";
}
// displaying the difference matrix
cout<<"\n\nThe difference is :\n\nRow\tColumn\tElement";
cout<<"
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKIAppbnQgbWFpbigpCnsKICAgCiAgIGludCBzcGFyc2UxWzEwXVszXSxzcGFyc2UyWzEwXVszXSxzdW1bMTBdWzNdOwogICBpbnQgbSxuLHAscSx0MSx0MixzLGVsZW1lbnQ7CiAgIGludCBpLGo7CiAgIGNvdXQ8PCJFbnRlciB0aGUgbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMgOiAiOwogICBjaW4+Pm0+Pm47CiAgIHQxPXQyPTA7CiAKICAgY291dDw8IlxuRW50ZXIgdGhlIGZpcnN0IG1hdHJpeCgiPDxtPDwiKiI8PG48PCIpOlxuIjsKICAgZm9yKGk9MTtpPD1tO2krKykKICAgewogICAgICBmb3Ioaj0xO2o8PW47aisrKQogICAgICB7CgkgY2luPj5lbGVtZW50OwoJIGlmKGVsZW1lbnQhPTApCgkgewoJICAgIHQxPXQxKzE7CgkgICAgc3BhcnNlMVt0MV1bMV09aTsKCSAgICBzcGFyc2UxW3QxXVsyXT1qOwoJICAgIHNwYXJzZTFbdDFdWzNdPWVsZW1lbnQ7CgkgfQogICAgICB9CiAgIH0KICAgc3BhcnNlMVswXVsxXT1tOwogICBzcGFyc2UxWzBdWzJdPW47CiAgIHNwYXJzZTFbMF1bM109dDE7CiAgIGNvdXQ8PCJcbkVudGVyIHRoZSBzZWNvbmQgbWF0cml4KCI8PG08PCIqIjw8bjw8Iik6XG4iOwogICBmb3IoaT0xO2k8PW07aSsrKQogICB7CiAgICAgIGZvcihqPTE7ajw9bjtqKyspCiAgICAgIHsKCSBjaW4+PmVsZW1lbnQ7CgkgaWYoZWxlbWVudCE9MCkKCSB7CgkgICAgdDI9dDIrMTsKCSAgICBzcGFyc2UyW3QyXVsxXT1pOwoJICAgIHNwYXJzZTJbdDJdWzJdPWo7CgkgICAgc3BhcnNlMlt0Ml1bM109ZWxlbWVudDsKCSB9CiAgICAgIH0KICAgfQogICBzcGFyc2UyWzBdWzFdPW07CiAgIHNwYXJzZTJbMF1bMl09bjsKICAgc3BhcnNlMlswXVszXT10MjsKIAogICAvLyBkaXNwbGF5aW5nIHRoZSBmaXJzdCBzcGFyc2UgbWF0cml4CiAgIGNvdXQ8PCJcblxuVGhlIGZpcnN0IHNwYXJzZSBtYXRyaXggaXMgOlxuXG5Sb3dcdENvbHVtblx0RWxlbWVudCI7CiAgIGNvdXQ8PCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOwogICBmb3IoaT0wO2k8PXQxO2krKykKICAgewogICAgICBjb3V0PDxzcGFyc2UxW2ldWzFdPDwiXHQiPDxzcGFyc2UxW2ldWzJdPDwiXHQiPDxzcGFyc2UxW2ldWzNdPDwiXG4iOwogICB9CiAgICAvLyBkaXNwbGF5aW5nIHRoZSBzZWNvbmQgc3BhcnNlIG1hdHJpeAogICBjb3V0PDwiXG5cblRoZSBzZWNvbmQgc3BhcnNlIG1hdHJpeCBpcyA6XG5cblJvd1x0Q29sdW1uXHRFbGVtZW50IjsKICAgY291dDw8IlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgIGZvcihpPTA7aTw9dDI7aSsrKQogICB7CiAgICAgIGNvdXQ8PHNwYXJzZTJbaV1bMV08PCJcdCI8PHNwYXJzZTJbaV1bMl08PCJcdCI8PHNwYXJzZTJbaV1bM108PCJcbiI7CiAgIH0KIAogICAvLyBBZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24KICAgaT1qPXM9MTsKICAgd2hpbGUoKGk8PXQxKSYmKGo8PXQyKSkKICAgewogICAgICBpZihzcGFyc2UxW2ldWzFdPT1zcGFyc2UyW2pdWzFdKSAgICAvLyBpZiByb3dzIGFyZSBlcXVhbAogICAgICB7CgkgaWYoc3BhcnNlMVtpXVsyXT09c3BhcnNlMltqXVsyXSkgLy8gaWYgY29sdW1ucyBhcmUgZXF1YWwKCSB7CgkgICAgc3VtW3NdWzFdPXNwYXJzZTFbaV1bMV07CgkgICAgc3VtW3NdWzJdPXNwYXJzZTFbaV1bMl07CgkgICAgc3VtW3NdWzNdPXNwYXJzZTFbaV1bM10rc3BhcnNlMltqXVszXTsKCSAgICAKCSAgICBpKys7CgkgICAgaisrOwoJICAgIGlmKHN1bVtzXVszXSE9MCkKCSAgICAgICBzKys7CgkgICAKCSB9CgkgCgkgICAgCgoJIH0KICAgICAgfQogICB9ICAvLyBlbmQgb2Ygd2hpbGUKICAgaWYoaTw9dDEpCiAgIHsKICAgICAgZm9yKHA9aTtwPD10MTtwKyspCiAgICAgIHsKCSBzdW1bc11bMV09c3BhcnNlMVtwXVsxXTsKCSBzdW1bc11bMl09c3BhcnNlMVtwXVsyXTsKCSBzdW1bc11bM109c3BhcnNlMVtwXVszXTsKCSBzKys7CgkKICAgICAgfQogICB9CiAgIGVsc2UgaWYoajw9dDIpCiAgIHsKICAgICAgZm9yKHA9ajtwPD10MjtwKyspCiAgICAgIHsKCSBzdW1bc11bMV09c3BhcnNlMltwXVsxXTsKCSBzdW1bc11bMl09c3BhcnNlMltwXVsyXTsKCSBzdW1bc11bM109c3BhcnNlMltwXVszXTsKCSBkaWZmW2RdWzNdPTAtc3BhcnNlMltqXVszXTsKCSBzKys7CgkKICAgICAgfQogICB9CiAgLy8gZW5kIG9mIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbgogIHN1bVswXVsxXT1tOwogIHN1bVswXVsyXT1uOwogIHN1bVswXVszXT1zLTE7CiAgCiAKICAvLyBkaXNwbGF5aW5nIHRoZSBzdW0gbWF0cml4CiAgIGNvdXQ8PCJcblxuVGhlIHN1bSBpcyA6XG5cblJvd1x0Q29sdW1uXHRFbGVtZW50IjsKICAgY291dDw8IlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CiAgIGZvcihpPTA7aTxzO2krKykKICAgewogICAgICBjb3V0PDxzdW1baV1bMV08PCJcdCI8PHN1bVtpXVsyXTw8Ilx0Ijw8c3VtW2ldWzNdPDwiXG4iOwogICB9CiAgICAvLyBkaXNwbGF5aW5nIHRoZSBkaWZmZXJlbmNlIG1hdHJpeAogICBjb3V0PDwiXG5cblRoZSBkaWZmZXJlbmNlIGlzIDpcblxuUm93XHRDb2x1bW5cdEVsZW1lbnQiOwogICBjb3V0PDwi