Description
輸入兩個稀疏矩陣,輸出它們相加的結果。
Input
第一行輸入四個正整數,分別是兩個矩陣的行m、列n、第一個矩陣的非零元素的個數t1和第二個矩陣的非零元素的個數t2。
接下來的t1+t2行是三元組,分別是第一個矩陣的數據和第二個矩陣的數據。三元組的第一個元素表示行號,第二個元素表示列號,第三個元素是該項的值。
Output
輸出相加後的矩陣三元組。
- Sample Input
3 4 3 2 1 1 1 1 3 1 2 2 2 1 2 1 2 2 3
- Sample Output
1 1 1 1 2 1 1 3 1
2 2 5
#include<stdio.h> #include<stdlib.h> typedef struct node{ int row; int col; int num; }node; typedef struct{ int cnt1,cnt2; node matrix1[101]; node matrix2[101]; }juzhen; void init(juzhen *p){ int n,m,t1,t2,i=0; int x,y,z,tmp; scanf("%d%d%d%d",&n,&m,&t1,&t2); p->cnt1=t1; p->cnt2=t2; while(1){ scanf("%d%d%d",&x,&y,&z); p->matrix1[i].row = x; p->matrix1[i].col = y; p->matrix1[i].num = z; i++; if(i==t1) break; } i=0; while(1){ scanf("%d%d%d",&x,&y,&z); p->matrix2[i].row = x; p->matrix2[i].col = y; p->matrix2[i].num = z; i++; if(i==t2) break; } } void add(juzhen *p){ int i,j,k,flag; int tmp; k=p->cnt1-1; for(i=0;i < p->cnt2;i++){ flag=1; for(j=0;j < p->cnt1;j++){ if(p->matrix1[j].row == p->matrix2[i].row && p->matrix1[j].col == p->matrix2[i].col){ p->matrix1[j].num +=p->matrix2[i].num; flag=0; break; } } if(flag){ p->matrix1[++k].row = p->matrix2[i].row; p->matrix1[k].col = p->matrix2[i].col; p->matrix1[k].num = p->matrix2[i].num; } } p->cnt1 = k+1; for(i=0;i < k;i++){ for(j=i;j<k+1;j++){ if(p->matrix1[i].row > p->matrix1[j].row){ tmp = p->matrix1[i].row; p->matrix1[i].row = p->matrix1[j].row; p->matrix1[j].row = tmp; tmp =p ->matrix1[i].col; p->matrix1[i].col = p->matrix1[j].col; p->matrix1[j].col = tmp; tmp = p->matrix1[i].num; p->matrix1[i].num = p->matrix1[j].num; p->matrix1[j].num = tmp; } } } for(i=0;i<k;i++){ for(j=i;j<k+1;j++){ if(p->matrix1[i].row == p->matrix1[j].row && p->matrix1[i].col > p->matrix1[j].col){ tmp = p->matrix1[i].col; p->matrix1[i].col = p->matrix1[j].col; p->matrix1[j].col = tmp; tmp = p->matrix1[i].num; p->matrix1[i].num = p->matrix1[j].num; p->matrix1[j].num = tmp; } } } } void output(juzhen *p){ int tmp=0; while((p->cnt1)--){ printf("%d %d %d\n",p->matrix1[tmp].row,p->matrix1[tmp].col,p->matrix1[tmp].num); tmp++; } } int main(){ juzhen *p=(juzhen *)malloc(sizeof(juzhen)); init(p); add(p); output(p); return 0; }