【问题描述】

稀疏矩阵可以以压缩方式进行存储,即:用一个n行3列矩阵只存储非零元素。每行存储一个非零元素,每行第一个为非零元素行标;第二个为非零元素列标;第三个为非零元素本身。如下左边为一个稀疏矩阵,右边是其存储形式。编写程序实现用上述压缩存储方式输入的稀疏矩阵的乘法,稀疏矩阵最大为9*9。以压缩方式输出结果矩阵。行标和列标都从0开始计数。

0   0   0   10    0 3 10
2   0   0   0      1 0 2
0   0   3   1      2 2 3
1   0   0   0      2 3 1
                       3 0 1

【输入形式】

先从控制台输入第一个矩阵的非零元素个数,再以压缩方式输入第一个矩阵的元素,即:分行输入非零元素的行标、列标和非零元素数据本身,以一个空格分隔行标、列标和非零元素。然后以同样方式输入第二个矩阵。

【输出形式】

在标准输出上以压缩方式分行输出结果矩阵,即:每行分别输出结果矩阵中非零元素的行标、列标和非零元素数据本身,行标、列标和非零数据之间以一个空格分隔,但每行最后一个数据后没有空格。先输出行标小的元素,若行标相同,则先输出列标小的元素。若没有非零元素,则不输出任何信息。

【输入样例】


5
0 3 10
1 0 2
2 2 3
2 3 1
3 0 1
2
0 1 200
2 2 -5

【输出样例】


1 1 400
2 2 -15
3 1 200

【样例说明】

输入的两个矩阵中的行、列最大下标均为3,所以可以看成是4*4的矩阵,即输入的两个矩阵分别为:


0   0   0   10
2   0   0   0
0   0   3   1
1   0   0   0

0   200   0   0
0   0     0   0
0   0     -5  0
0   0     0   0

两矩阵相乘的结果为:


0   0    0   0
0   400  0   0
0   0    -15 0
0   200  0   0

#include <stdio.h>
#include <stdlib.h>
#define maxn  15
//定义节点
typedef struct  node {int row, col, v;
} node;
//定义三元组存储稀疏矩阵
struct T {node Node[maxn];int MAXrow, MAXcol, MAXsize;
} TA, TB, TC;int main() {int num1,num2,i,j,k,sum,p,q;scanf("%d", &num1);//输入a矩阵TA.MAXsize = num1;for(i=0;i<num1;i++){scanf("%d%d%d",&TA.Node[i].row,&TA.Node[i].col,&TA.Node[i].v);}TA.MAXrow = maxn;TA.MAXcol = maxn;scanf("%d", &num2);//输入b矩阵TB.MAXsize = num2;for(k=0;k<num2;k++){scanf("%d%d%d",&TB.Node[k].row,&TB.Node[k].col,&TB.Node[k].v);}TB.MAXrow = maxn;TB.MAXcol = maxn;TC.MAXsize = 0;TC.MAXrow = maxn;TC.MAXrow = maxn;for(i = 0; i < maxn; i++) {//计算c矩阵for(j = 0; j < maxn; j++) {sum = 0;for(p = 0; p < TA.MAXsize ; p++) {if(TA.Node[p].row != i) continue;for(q = 0; q < TB.MAXsize; q++) {if(TB.Node[q].col != j) continue;if(TA.Node[p].col == TB.Node[q].row) {sum += TA.Node[p].v * TB.Node[q].v;}}}if(sum != 0) {TC.Node[TC.MAXsize].row = i;TC.Node[TC.MAXsize].col = j;TC.Node[TC.MAXsize].v = sum;TC.MAXsize++;}}}for(i=0;i<TC.MAXsize;i++){printf("%d %d %d\n",TC.Node[i].row,TC.Node[i].col,TC.Node[i].v);}return 0;
}

稀疏矩阵乘法运算(C语言)相关推荐

  1. c语言实现稀疏矩阵乘法,C语言实现稀疏矩阵

    本文实例为大家分享了C语言实现稀疏矩阵的具体代码,供大家参考,具体内容如下 #include "stdio.h" #define maxsize 10 typedef struct ...

  2. 大数乘法运算(C语言)

    大数乘法运算 利用乘法法则,相乘,然后进位,取余 详细过程-如图 源代码 #include<stdio.h> #include<string.h> #define N 100 ...

  3. 电力系统:节点导纳矩阵的稀疏存储(稀疏矩阵)——C语言十字链表实现

    最近学习电力系统分析这门专业课,发现计算机分析在这门课上非常重要. 大电网的等值电路参数计算.导纳矩阵存储.潮流计算等都需要在电脑上编程实现. 打算试试用拿手的纯C来实现导纳矩阵的存储,也就是实现一个 ...

  4. 谷歌Transformer再升级——新模型实现性能、速度双提升,发展潜力巨大

    "数据猿年度重磅活动预告:2020年度金猿策划活动(金猿榜单发布+金猿奖杯颁发)即将推出,尽情咨询期待! 大数据产业创新服务媒体 --聚焦数据 · 改变商业 当我们在翻译软件上输入 &quo ...

  5. 自己挖坑自己填,谷歌大改Transformer注意力,速度、内存利用率都提上去了

    机器之心报道 机器之心编辑部 考虑到 Transformer 对于机器学习最近一段时间的影响,这样一个研究就显得异常引人注目了. Transformer 有着巨大的内存和算力需求,因为它构造了一个注意 ...

  6. 谷歌大改Transformer注意力,速度、内存利用率都提上去了

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 转载自:机器之心 考虑到 Transformer 对于机器学习最近一段时间的影响,这样 ...

  7. 用MapReduce实现矩阵乘法

    主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项 ...

  8. 谷歌大改Transformer注意力,速度大涨,显存大降!

    源 | 机器之心 导读 考虑到 Transformer 对于机器学习最近一段时间的影响,这样一个研究就显得异常引人注目了. Transformer 有着巨大的内存和算力需求,因为它构造了一个注意力矩阵 ...

  9. 谷歌大改Transformer注意力,速度、内存利用率都提上去了-新的 Transformer 架构——Performer

    原文地址:https://www.jiqizhixin.com/articles/2020-10-28-10 Transformer 有着巨大的内存和算力需求,因为它构造了一个注意力矩阵,需求与输入呈 ...

  10. 创新!谷歌大改Transformer注意力

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

最新文章

  1. XLNet:公平PK,BERT你已经被超过!
  2. JavaScript正则表达式快速判断技巧
  3. Linux shell 编程入门 - 使用ubuntu-14.10
  4. Community Server专题一:概述Community Server
  5. Java 程序 ——感想
  6. svn查看某个时间段的日志信息
  7. 网络安全 Security+(SY0-601)学习笔记
  8. 【转载】RESTful 架构风格概述
  9. 通过css布局实现去掉window.print()打印界面的页眉页脚
  10. 【EduCoder答案】HTML——表单类的标签
  11. CAN负载率为什么不能太高?
  12. 人工蜂群算法求解TSP旅行商问题C++(2020.11.13)
  13. 使用HTML+CSS制作一个简单的网页
  14. Oracle 时间段查询
  15. stm32正常运行流程图_stm32学习笔记之问题总结
  16. VUE|利用父子组件制作弹出框
  17. 赫兹Hertz重新上市:转道纳斯达克挂牌,租车行业重现光辉?
  18. ORA-01653:表空间扩展失败
  19. PowerDesinger12.5破解中文版-资源共享与安装介绍
  20. Golang实现高并发的调度模型---MPG模式

热门文章

  1. 微信小程序在js中的data里定义对象
  2. python测试工程师简历模板_自动化测试工程师简历专业技能怎么写
  3. Kubernetes监控体系(1)-cAdvisor介绍
  4. Delphi 德尔菲法
  5. matlab 方差,方差分解——matlab 代码
  6. TLQ7/8 常用命令说明
  7. 数字孪生港珠澳大桥:大湾区综合管理信息系统
  8. 1013_MISRA C规范学习笔记9
  9. 最简单播放m3u8链接的方法
  10. 六自由度机械臂雅可比矩阵计算