求助!稀疏矩阵
用c语言或c++编程:稀疏矩阵的表示及加,减,乘,转置的运算
程序代码:
#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); }