?测试输入: 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 *********/
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)
{
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;
}
}
}
}
/********** End **********/
}
|