1.建立三元组矩阵,实现矩阵的输入、输出的函数; 2.输入两个稀疏矩阵,计算两个矩阵的和并将结果输出。 数据类型定义 : #define Maxsize 100 typedef struct{ int i,j; Elemtype v; }Triple; typedef struct { Triple data[Maxsize+1]; int m,n,t; }TSmatrix;
时间: 2024-02-05 17:02:34 浏览: 75
好的,您的问题是如何建立三元组矩阵并实现输入输出函数,以及如何输入两个稀疏矩阵并计算它们的和。
首先,我们来看如何建立三元组矩阵并实现输入输出函数。
```c++
#include<iostream>
using namespace std;
#define Maxsize 100
typedef struct{
int i,j;
int v;
}Triple;
typedef struct{
Triple data[Maxsize+1];
int m,n,t;
}TSmatrix;
void input(TSmatrix &M){
cout<<"请输入矩阵的行数、列数和非零元素个数:"<<endl;
cin>>M.m>>M.n>>M.t;
cout<<"请输入非零元素的行、列、值:"<<endl;
for(int i=1;i<=M.t;i++){
cin>>M.data[i].i>>M.data[i].j>>M.data[i].v;
}
}
void output(TSmatrix M){
int k=1;
for(int i=1;i<=M.m;i++){
for(int j=1;j<=M.n;j++){
if(i==M.data[k].i&&j==M.data[k].j){
cout<<M.data[k].v<<" ";
k++;
}
else{
cout<<"0 ";
}
}
cout<<endl;
}
}
int main(){
TSmatrix M;
input(M);
output(M);
return 0;
}
```
上面的代码中,我们定义了两个结构体,`Triple`表示三元组,`TSmatrix`表示稀疏矩阵。在 `input` 函数中,我们首先输入矩阵的行数、列数和非零元素个数,然后输入非零元素的行、列、值。在 `output` 函数中,我们遍历矩阵的每一个元素,如果当前位置是一个非零元素,则输出其值,否则输出 0。
接下来,我们来看如何输入两个稀疏矩阵并计算它们的和。
```c++
#include<iostream>
using namespace std;
#define Maxsize 100
typedef struct{
int i,j;
int v;
}Triple;
typedef struct{
Triple data[Maxsize+1];
int m,n,t;
}TSmatrix;
void input(TSmatrix &M){
cout<<"请输入矩阵的行数、列数和非零元素个数:"<<endl;
cin>>M.m>>M.n>>M.t;
cout<<"请输入非零元素的行、列、值:"<<endl;
for(int i=1;i<=M.t;i++){
cin>>M.data[i].i>>M.data[i].j>>M.data[i].v;
}
}
void output(TSmatrix M){
int k=1;
for(int i=1;i<=M.m;i++){
for(int j=1;j<=M.n;j++){
if(i==M.data[k].i&&j==M.data[k].j){
cout<<M.data[k].v<<" ";
k++;
}
else{
cout<<"0 ";
}
}
cout<<endl;
}
}
void add(TSmatrix M1,TSmatrix M2,TSmatrix &M3){
int i=1,j=1,k=1;
while(i<=M1.t&&j<=M2.t){
if(M1.data[i].i<M2.data[j].i){
M3.data[k]=M1.data[i];
i++;
k++;
}
else if(M1.data[i].i>M2.data[j].i){
M3.data[k]=M2.data[j];
j++;
k++;
}
else{
if(M1.data[i].j<M2.data[j].j){
M3.data[k]=M1.data[i];
i++;
k++;
}
else if(M1.data[i].j>M2.data[j].j){
M3.data[k]=M2.data[j];
j++;
k++;
}
else{
M3.data[k].i=M1.data[i].i;
M3.data[k].j=M1.data[i].j;
M3.data[k].v=M1.data[i].v+M2.data[j].v;
i++;
j++;
k++;
}
}
}
while(i<=M1.t){
M3.data[k]=M1.data[i];
i++;
k++;
}
while(j<=M2.t){
M3.data[k]=M2.data[j];
j++;
k++;
}
M3.m=M1.m;
M3.n=M1.n;
M3.t=k-1;
}
int main(){
TSmatrix M1,M2,M3;
input(M1);
input(M2);
add(M1,M2,M3);
output(M3);
return 0;
}
```
上面的代码中,我们新增了一个 `add` 函数,用来计算两个稀疏矩阵的和。我们使用了归并排序的思想,将两个矩阵的非零元素按行、列递增的顺序排序,然后依次比较两个矩阵的元素,如果行号和列号相同,则将对应位置的值相加。最后,将结果保存在第三个矩阵中,并输出。
希望这些代码可以帮助您解决问题。如果您还有其他问题,请继续提问。
阅读全文