数据结构第四次实验 矩阵快速转置与矩阵加法

#include <bits/stdc++.h>
using namespace std; 

struct xyz {
	int i,j;
	int v;
}Triple;

 struct xsjz{ // 存储系数矩阵 
 	xyz data[100];
 	int mu,nu,tu;
 }TsMatrix;
 
int oder[10][3] = {{1,2,12},{1,3,9},{3,1,-3},{3,6,14},{4,3,24},{5,2,18},{6,1,15},{6,4,-7},{7,2,8}}; // 原始数据 
 
xsjz M,T;
 
void fastzz() // 快速转置 
{
	printf("------------------------------\n");
	printf("转置\n");
	int i,p,col,pos,cpot[10];
	int num[10];
	T.mu = M.mu; //行 
 	T.nu = M.nu; // 列 
 	T.tu = M.tu; // 数
 	for(i=1;i<=M.nu ; i++) num[i] = 0;
 	
 	for(p=1;p<=M.tu ; p++)
		num[M.data[p].j]++;//m每一列非零元的个数 
			
 	cpot[1]=1;
 	
 	
	for(col = 2; col <= M.nu ; col++)
		cpot[col] = cpot[col-1] + num[col-1];//col列第一个非零元的编号 
		
	for(p = 1; p <= M.tu ; p++)
	{
		col = M.data[p].j;
		pos = cpot[col];
		T.data[pos].i =  M.data[p].j;
 		T.data[pos].j =  M.data[p].i;
 		T.data[pos].v =  M.data[p].v;
 		++cpot[col]; //该列下一个元素 
	} 
	
} 
int mp[100][100],a[100][100],b[100][100]; 
void qiuhe()
{
	printf("------------------------------\n");
	printf("求和\n");
	for(int i=1;i<=M.tu;i++)
	{
		a[M.data[i].i][M.data[i].j] = M.data[i].v;
		b[T.data[i].i][T.data[i].j] = T.data[i].v;
	}
	printf("A\n");
	for(int i=1;i<=M.nu;i++)
		for(int j=1;j<=M.mu;j++)
			{
			printf("%5d",a[i][j]);
			if(j==M.mu)printf("\n");
			}
	printf("B\n");
	for(int i=1;i<=M.nu;i++)
		for(int j=1;j<=M.mu;j++)
			{
			printf("%5d",b[i][j]);
			if(j==M.mu)printf("\n");
			}
		printf("C\n");
	for(int i=1;i<=M.nu;i++)
		for(int j=1;j<=M.mu;j++)
			{
			mp[i][j]=a[i][j]+b[i][j];
			printf("%5d",mp[i][j]);
			if(j==M.mu)printf("\n");
			}
} 
 int main()
 {
 	int i,j,k;
 	
 	M.mu = 7; //行 
 	M.nu = 7; // 列 
 	M.tu = 9; // 数
	for( i = 0; i < M.tu; i++)
	{
		M.data[i+1].i = oder[i][0];
		M.data[i+1].j = oder[i][1];
		M.data[i+1].v = oder[i][2];
	} 

	
	for(i=1;i<=M.tu ;i++)
	{
		printf("%d %d %d\n",M.data[i].i ,M.data[i].j,M.data[i].v );
	}
	fastzz();
	for(i=1;i<=T.tu ;i++)
	{
		printf("%d %d %d\n",T.data[i].i ,T.data[i].j,T.data[i].v );
	}
	qiuhe();
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wym_king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值