求助!稀疏矩阵
用c语言或c++编程:稀疏矩阵的表示及加,减,乘,转置的运算
2015-06-11 15:59
程序代码:#include<stdio.h>
#include<stdlib.h>
#define N 80
typedef struct triple{
int mu;
int nu;
int value;
}triple;
void transposition(int a[][N],int m,int n){
int b[N][N];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d\t",a[j][i]);
}
printf("\n");
}
}
void add(int a[][N],int b[][N],int m,int n){
int c[N][N];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
c[i][j]=a[i][j]+b[i][j];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d\t",c[i][j]);
}
printf("\n");
}
}
void cut(int a[][N],int b[][N],int m,int n){
int c[N][N];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
c[i][j]=a[i][j]-b[i][j];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d\t",c[i][j]);
}
printf("\n");
}
}
void multi(int a[][N],int b[][N],int m,int n){//以方阵为例,矩阵可按此修改
int c[N][N];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
c[i][j]=0;
for(int ii=0;ii<n;ii++)
c[i][j]+=a[i][ii]*b[ii][j];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d\t",c[i][j]);
}
printf("\n");
}
}
void show(int a[][N],int m,int n){
int b[N][N];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d\t",a[i][j]);
}
printf("\n");
}
}
main(){
int i,j,m,n,t,k,flag=0;
triple a[80],b[80];
int a1[N][N],b1[N][N];
printf("input the number of data int martrix1:");
//scanf("%d",&t);
t=3;
printf("input the rows of matrix1:");
//scanf("%d",&m);
m=3;
printf("input the columns of matrix1:");
//scanf("%d",&n);
n=3;
for(i=1;i<=t;i++){
printf("data[%d].mu=?\t",i);
//scanf("%d",&(a[i].mu));
a[i].mu=t+1-i;
printf("data[%d].nu=?\t",i);
//scanf("%d",&(a[i].nu));
a[i].nu=i;
printf("data[%d].value=?\t",i);
//scanf("%d",&(a[i].value));
a[i].value=i;
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
flag=0;
for(k=1;k<=t;k++){
if((i==a[k].mu)&&(j==a[k].nu)){
a1[a[k].mu-1][a[k].nu-1]=a[k].value;
flag=1;
break;
}
}
if(flag==0)a1[a[k].mu-1][a[k].nu-1]=0;
}
}
printf("转置前\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%d\t",a1[i][j]);
}
printf("\n");
}
printf("转置后\n");
transposition(a1,m,n);
printf("input the number of data int martrix2:");
//scanf("%d",&t);
t=3;
for(i=1;i<=t;i++){
printf("data[%d].mu=?\t",i);
//scanf("%d",&(a[i].mu));
a[i].mu=i;
printf("data[%d].nu=?\t",i);
//scanf("%d",&(a[i].nu));
a[i].nu=i;
printf("data[%d].value=?\t",i);
//scanf("%d",&(a[i].value));
a[i].value=i;
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
flag=0;
for(k=1;k<=t;k++){
if((i==a[k].mu)&&(j==a[k].nu)){
b1[a[k].mu-1][a[k].nu-1]=a[k].value;
flag=1;
break;
}
}
if(flag==0)b1[a[k].mu-1][a[k].nu-1]=0;
}
}
printf("\n\nmatrix1:\n");
show(a1,m,n);
printf("matrix2:\n");
show(b1,m,n);
printf("\nthe sum of two martrix:\n");
add(a1,b1,m,n);
printf("the subtraction of two martrix:\n");
cut(a1,b1,m,n);
printf("the product of two martrix:\n");
multi(a1,b1,m,n);
}

2015-06-11 19:25
2015-06-18 08:02
2015-06-18 14:59