【作业】DS稀疏矩阵
写了两个小时,书上代码好难看啊
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h> #define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define OVERFLOW -1 #define MAXSIZE 12500 typedef int Status;
typedef int ElemType; using namespace std;
struct triple {
int i, j;//row,col
ElemType e;
triple(int i=, int j=, ElemType e=) :i(i), j(j), e(e) {}
}; typedef struct {
triple data[MAXSIZE + ];
int mu, nu, tu;//row,col,ele
}TSMatrix; typedef struct {
triple data[MAXSIZE + ];
int rpos[MAXSIZE + ];
int mu, nu, tu;//row,col,ele
}RLSMatrix;
int num[MAXSIZE], cpot[MAXSIZE],ctemp[MAXSIZE];
TSMatrix T, M;
RLSMatrix m, n,q; Status TransposeSMatrix(TSMatrix M, TSMatrix &T) {
T.mu = M.nu, T.nu = M.mu, T.tu = M.tu;
if (T.tu) {
int q = ;
for (int col = ; col < M.nu; col++)
for(int p=;p<M.tu;p++)
if (col == M.data[p].j) {
T.data[q].i = M.data[p].j;
T.data[q].j = M.data[p].i;
T.data[q].e = M.data[p].e;
q++;
}
}
return OK;
} Status FastTransposeSMatrix(TSMatrix M, TSMatrix &T) {
T.mu = M.nu, T.nu = M.mu, T.tu = M.tu;
if (T.tu) {
for (int col = ; col < M. nu; col++)num[col] = ;
for (int t = ; t < M.tu; t++)num[M.data[t].j]++;
cpot[] = ;
for (int col = ; col < M.nu; col++)cpot[col] = cpot[col - ] + num[col - ];
for (int p = ; p < M.tu; p++) {
int q = cpot[M.data[p].j];
T.data[q].i = M.data[p].j;
T.data[q].j = M.data[p].i;
T.data[q].e = M.data[p].e;
cpot[M.data[p].j]++;
}
}
return OK;
} Status Setrpos(RLSMatrix& M) {
for (int row = ; row < M.mu; row++)num[row] = ;
for (int t = ; t < M.tu; t++)num[M.data[t].i]++;
M.rpos[] = ;
for (int row = ; row < M.mu; row++)M.rpos[row] = M.rpos[row - ] + num[row - ];
return OK;
} Status MultMatrix(RLSMatrix M, RLSMatrix N, RLSMatrix &Q) {
if (M.nu != N.mu)return ERROR;
Q.mu = M.mu; Q.nu = N.nu; Q.tu = ;
if (M.tu*N.tu != ) {
for (int arow = ; arow < M.mu; arow++) {
memset(ctemp, , sizeof(ctemp));
Q.rpos[arow] = Q.tu + ;
int tp = ; if (arow < M.mu-)tp = M.rpos[arow + ]; else tp = M.tu + ;//tp
for (int pp = M.rpos[arow]; pp < tp; pp++) {
int brow = M.data[pp].j; //brow
int t = ; if (brow < N.mu-)t = N.rpos[brow + ]; else t = N.tu + ;//t
for (int qq = N.rpos[brow]; qq < t; qq++) {
ctemp[N.data[qq].j] += M .data[pp].e*N.data[qq].e;//ctemp
}//for q;
}//for p
for (int ccol = ; ccol < Q.nu; ccol++)if (ctemp[ccol]) {
if (++Q.tu > MAXSIZE)return ERROR;
Q.data[Q.tu-] = triple(arow, ccol, ctemp[ccol]); }
}//for aarow
}//if !=0
return OK;
} Status Read(TSMatrix& M) {
if (scanf("%d%d%d", &M.mu, &M.nu, &M.tu) != )return FALSE;
else {
//cin >> M.mu >> M.nu >> M.tu;
for (int i = ; i < M.tu; i++) {
cin >> M.data[i].i >> M.data[i].j >> M.data[i].e;
}
return OK;
}
} Status Read(RLSMatrix& M) {
if (scanf("%d%d%d", &M.mu, &M.nu, &M.tu) != )return FALSE;
else {
//cin >> M.mu >> M.nu >> M.tu;
for (int i = ; i < M.tu; i++) {
cin >> M.data[i].i >> M.data[i].j >> M.data[i].e;
}
return OK;
}
} Status Print(TSMatrix T) {
for (int i = ; i < T.tu; i++) {
printf("%5d%5d%5d\n", T.data[i].i, T.data[i].j, T.data[i].e);
}
return OK;
} Status Print(RLSMatrix T) {
for (int i = ; i < T.tu; i++) {
printf("%5d%5d%5d\n", T.data[i].i, T.data[i].j, T.data[i].e);
}
return OK;
} Status PrintFormat(TSMatrix T) {
int cnt = ;
for (int i = ; i < T.mu; i++) {
for (int j = ; j < T.nu; j++) {
if (T.data[cnt].i == i&&T.data[cnt].j == j)
printf("%5d", T.data[cnt++].e);
else printf("%5d", );
}
cout << endl;
}
return OK;
} Status PrintFormat(RLSMatrix T) {
int cnt = ;
for (int i = ; i < T.mu; i++) {
for (int j = ; j < T.nu; j++) {
if (T.data[cnt].i == i&&T.data[cnt].j == j)
printf("%5d", T.data[cnt++].e);
else printf("%5d", );
}
cout << endl;
}
return OK;
} int main() {
while (Read(m)) {
Read(n);
//cout << 1 << endl; Setrpos(m); Setrpos(n);
//Print(M); cout << endl;
puts("A:");
PrintFormat(m); cout << endl;
puts("B:");
PrintFormat(n); cout << endl;
MultMatrix(m, n, q);
puts("A*B:");
PrintFormat(q);
//Print(q);
}
//system("pause");
}
/*
3 4 4
0 0 3
0 3 5
1 1 -1
2 0 2 4 2 4
0 1 2
1 0 1
2 0 -2
2 1 4 */
【作业】DS稀疏矩阵的更多相关文章
- 远程调用与编译DS作业
1.编译服务器上的ds作业 dscc /d 服务器地址:端口 /u 用户名 /p 密码 工程名称 /J 作业名称 解释: 作业名称:直接写作业名称即可,不用.pjb 2.执行服务器上的ds作业 dsj ...
- Datastage8.5导入导出DS作业例子
以下为Datastage8.5的命令行方式的导入和导出,直接登陆服务器执行如下命令即可.不是Datastage客户端的导入和导出,使用命令行方式的好处是:可以将该命令使用shell脚本进行调用导入和导 ...
- DS博客作业——树
DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...
- DS博客作业08--课程总结
DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...
- DS博客作业--07查找
目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...
- DS博客大作业--树(李天明组)
DS博客大作业--树 大作业博客要求 (10分) 1.树的存储结构说明 .树采用的是链式存储结构. .这段代码中定义了两个结构体.第一个是自定义为Name类型的结构体,里面的成员有字符串str和类型为 ...
- DS博客作业05--查找
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...
- DS博客作业04--图
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...
- DS博客作业03--树
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...
随机推荐
- linux nfs共享文件
linux文件共享可以有多种方式:samba,nfs,ftp等等 nfs在linux之间效率高些: function nfs(){ share_folder="/data1 192.168. ...
- Selenium Web 自动化 - Selenium(Java)环境搭建
Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...
- LeetCode: First Missing Positive 解题报告
First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...
- 模仿CountDownLatch类自定义倒时计时器
简介 这里模仿CountDownLatch类自定义到时计时器,利用AQS模板中的尝试获得共享和释放共享 1.MyCountDownLatch package com.jacky; import com ...
- Bitmap用来做大数据处理
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)" Bit-map空间压缩和快速排序去 ...
- mysql 修改表的每个列的字符类型
#!/bin/shfor i in $(mysql -uroot -p112358s uarticles_2019 -e "show tables;"|egrep -v Table ...
- EasyUI datagrid columns 中 field 区分大小写
columns: [ [ {field: 'id', title: 'ID'}, {field: 'name', title: 'NAME'}, {field: 'DT_CRT_TM', title: ...
- 用opencv抽取视频的帧并保存为连续的图片
转自http://blog.csdn.net/timidsmile/article/details/8283319 #include"stdafx.h" #include < ...
- 关于Unity中的Mesh Collider碰撞器
原来我的场景中有一个平面Plane带Mesh Collider碰撞器组件,一个主角Hero带有一个Box Collider碰撞器和有重力的Rigidbody刚体组件,主角可以放在平面上. 在导入场景后 ...
- MTK 自定义系统服务
添加系统服务需要添加aidl,service,manager文件,需要修改SystemServer,Context,ContextImpl 下面举例进行说明,主要添加一个服务,用于获取系统时间和版本号 ...