數據結構30——稀疏矩陣加法,實現C=A+B

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;
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章