稀疏矩阵的运算
內容
假設兩個稀疏矩陣A和B,他們均為m行n列,要求表寫求矩陣的加法即:C=A+B的算法(C矩陣存儲A與B相加的結果)
分析
利用一維數組來存儲,一維數組順序存放非零元素的行號、列號和數值,行號-1表示結束,然后進行矩陣加法運算時依次掃描矩陣A和B的行列值,并以行優先。當行列相同的時候,將第三個元素的值相加和以及行列號三個元素存入結果數組C中;不相同時,將A或B的三個元素直接存入結果數組中。
代碼
// fanchen.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" #include<iostream>using namespace std;#define LINE 10struct Node{//行號int row;//列號int line;//數據int data; };//初始化數組 int init(Node array[]) {int row,line,data;int index = 0;while(cin>>row){if(row == -1){break;}cin>>line>>data;array[index].data=data;array[index].line = line;array[index].row = row;index++;}return index; }//打印數組 void printArray(Node array[],int len) {for(int i = 0;i < len;i++){cout<<array[i].row<<" "<<array[i].line<<" "<<array[i].data<<endl;} }int calc(Node a[],int lena,Node b[],int lenb,Node c[]) {//計數單位int index = 0;int i = 0,j = 0,k;while(i < lena && j < lenb){int tempa = a[i].row * 10 + a[i].line;int tempb = b[j].row * 10 + b[j].line;if(tempa < tempb){c[index++] = a[i++];}else if(tempa == tempb){int l = a[i].line;int r = a[i].row;int data = a[i].data + b[j].data;c[index].line = l;c[index].row = r;c[index].data = data;index++;i++;j++;}else{c[index++] = b[j++];}}while(i < lena){c[index++] = a[i++];}while(j < lenb){c[index++] = b[j++];}return index; }int _tmain(int argc, _TCHAR* argv[]) {Node a[60],b[60],c[60];//a的長度int lena = init(a);int lenb = init(b);int lenc = calc(a,lena,b,lenb,c);cout<<"a::::"<<endl;printArray(a,lena);cout<<endl;cout<<"b::::"<<endl;printArray(b,lenb);cout<<endl;printArray(c,lenc);system("pause");return 0; }總結
                            
                        - 上一篇: 队列的应用
 - 下一篇: SpringBoot跨域请求