测试输入:
5 5 6 //输入矩阵A的总行数、总列数及非零元个数
0 2 -9 0 4 5 1 0 -7 1 2 7 3 1 8 4 2 9 //按行序输入矩阵A的各个非零元素的行号、列号及值
预期输出:
The Matrix A:
(0,2,-9)
(0,4,5)
(1,0,-7)
(1,2,7)
(3,1,8)
(4,2,9)
The Transport Matrix of A:
(0,1,-7)
(1,3,8)
(2,0,-9)
(2,1,7)
(2,4,9)
(4,0,5) //末尾换行
#include<stdio.h>
#include<string.h>
#define OK 1
#define Maxsize 10 //用户自定义三元组最大长度
typedef struct //定义三元组表
{
int i,j;
int v;
}SPNode;
typedef struct //定义三元组表
{
SPNode data[Maxsize];
int m,n,t; //矩阵行,列及三元组表长度
}SPMatrix;
void InitSPNode(SPMatrix *a) //输入三元组表
{
int i,j,k,val,maxrow,maxcol;
maxrow=0;
maxcol=0;
i=j=0;
k=0;
while(i!=-1&&j!=-1) //两个其中一个等于-1结束输入
{
printf("输入(行 列 值):");
scanf("%d %d %d",&i,&j,&val);
a->data[k].i=i;
a->data[k].j=j;
a->data[k].v=val;
if(maxrow<i)maxrow=i;
if(maxcol<j)maxcol=j;
k++;
}
a->m=maxrow;a->n=maxcol;a->t=k-1;
}
void showMatrix(SPMatrix *a) //输出稀疏矩阵
{
int p,q;
int t=0;
for(p=0;p<=a->m;p++)
{for(q=0;q<=a->n;q++)
{ if(a->data[t].i==p&&a->data[t].j==q)
{ printf("%d ",a->data[t].v);
t++;
}
else printf("0 ");
}
printf("\n");
}
}
void TransposeSMatrix(SPMatrix *a,SPMatrix *b) //稀疏矩阵转置
{
int q,col,p;
b->m=a->n;b->n=a->m; b->t=a->t;
if(b->t)
{
q=0;
for(col=0;col<=a->n;++col) //按a的列序转置
for(p=0;p<a->t;++p) //扫描整个三元组表
if(a->data[p].j==col)
{
b->data[q].i=a->data[p].j;
b->data[q].j=a->data[p].i;
b->data[q].v=a->data[p].v;
++q;
}
}
}
void main(void)
{
SPMatrix a,b;
printf("\n 结束请输入(-1,-1,-1)\n");
InitSPNode(&a);
printf("输入矩阵为:\n");
showMatrix(&a); //转置前
TransposeSMatrix(&a,&b);
printf("输出矩阵为:\n");
showMatrix(&b); //转置后
}
/*************************************************************
稀疏矩阵 实现文件
更新于2020年10月28日
**************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SparseMatrix.h"
void input(SPMatrix &a)//输入采用三元组顺序表存储的矩阵
{
int p;
scanf("%d%d%d",&a.m,&a.n,&a.t); //输入矩阵总行数、总列数和非零元素的个数
for(p=0;p<a.t;p++)
scanf("%d%d%d",&a.data[p].i,&a.data[p].j,&a.data[p].v);
}
void output(SPMatrix a)//输出矩阵的三元组表
{
int p;
for(p=0;p<a.t;p++)
printf("(%d,%d,%d)\n",a.data[p].i,a.data[p].j,a.data[p].v);
}
void TransSMatrix(SPMatrix a, SPMatrix &b)//一般转置,即:按列序转置
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
/********** End **********/
}