第八周项目4 稀疏矩阵的三元组的实现与应用
来源:互联网 发布:淘宝点外卖 编辑:程序博客网 时间:2024/06/05 15:55
解答一:- #include <stdio.h>
- #include "tup.h"
- bool MatAdd(TSMatrix a,TSMatrix b,TSMatrix &c)
- {
- int i,j;
- ElemType va,vb,vc;
- if (a.rows!=b.rows || a.cols!=b.cols)
- return false;
- c.rows=a.rows;
- c.cols=a.cols;
- c.nums=0;
- for(i=0; i<M; i++)
- for(j=0; j<N; j++)
- {
- Assign(a,va,i,j);
- Assign(b,vb,i,j);
- vc=va+vb;
- if(vc)
- Value(c,vc,i,j);
- }
- return true;
- }
-
- int main()
- {
- TSMatrix ta,tb,tc;
- int A[M][N]=
- {
- {0,0,1,0,0,0,0},
- {0,2,0,0,0,0,0},
- {3,0,0,0,0,0,0},
- {0,0,0,5,0,0,0},
- {0,0,0,0,6,0,0},
- {0,0,0,0,0,7,4}
- };
- int B[M][N]=
- {
- {0,0,10,0,0,0,0},
- {0,0,0,20,0,0,0},
- {0,0,0,0,0,0,0},
- {0,0,0,50,0,0,0},
- {0,0,20,0,0,0,0},
- {0,0,0,10,0,0,4}
- };
- CreatMat(ta,A);
- CreatMat(tb,B);
- printf("A:\n");
- DispMat(ta);
- printf("B:\n");
- DispMat(tb);
- if(MatAdd(ta, tb, tc))
- {
- printf("A+B:\n");
- DispMat(tc);
- }
- else
- {
- printf("相加失败\n");
- }
- return 0;
- }
解答二:- #include <stdio.h>
- #include "tup.h"
- bool MatAdd(TSMatrix a,TSMatrix b,TSMatrix &c)
- {
- int i=0,j=0,k=0;
- ElemType v;
- if (a.rows!=b.rows || a.cols!=b.cols)
- return 0;
- c.rows=a.rows;
- c.cols=a.cols;
- while (i<a.nums && j<b.nums)
- {
- if (a.data[i].r==b.data[j].r)
- {
- if(a.data[i].c<b.data[j].c)
- {
- c.data[k].r=a.data[i].r;
- c.data[k].c=a.data[i].c;
- c.data[k].d=a.data[i].d;
- k++;
- i++;
- }
- else if (a.data[i].c>b.data[j].c)
- {
- c.data[k].r=b.data[j].r;
- c.data[k].c=b.data[j].c;
- c.data[k].d=b.data[j].d;
- k++;
- j++;
- }
- else
- {
- v=a.data[i].d+b.data[j].d;
- if (v!=0)
- {
- c.data[k].r=a.data[i].r;
- c.data[k].c=a.data[i].c;
- c.data[k].d=v;
- k++;
- }
- i++;
- j++;
- }
- }
- else if (a.data[i].r<b.data[j].r)
- {
- c.data[k].r=a.data[i].r;
- c.data[k].c=a.data[i].c;
- c.data[k].d=a.data[i].d;
- k++;
- i++;
- }
- else
- {
- c.data[k].r=b.data[j].r;
- c.data[k].c=b.data[j].c;
- c.data[k].d=b.data[j].d;
- k++;
- j++;
- }
- c.nums=k;
- }
- return true;
- }
-
- int main()
- {
- TSMatrix ta,tb,tc;
- int A[M][N]=
- {
- {0,0,1,0,0,0,0},
- {0,2,0,0,0,0,0},
- {3,0,0,0,0,0,0},
- {0,0,0,5,0,0,0},
- {0,0,0,0,6,0,0},
- {0,0,0,0,0,7,4}
- };
- int B[M][N]=
- {
- {0,0,10,0,0,0,0},
- {0,0,0,20,0,0,0},
- {0,0,0,0,0,0,0},
- {0,0,0,50,0,0,0},
- {0,0,20,0,0,0,0},
- {0,0,0,10,0,0,4}
- };
- CreatMat(ta,A);
- CreatMat(tb,B);
- printf("A:\n");
- DispMat(ta);
- printf("B:\n");
- DispMat(tb);
- if(MatAdd(ta, tb, tc))
- {
- printf("A+B:\n");
- DispMat(tc);
- }
- else
- {
- printf("相加失败\n");
- }
- return 0;
- }
运行结果: