【作业】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. 本周学习总结 ...
随机推荐
- Rocket Typist for Mac(增强型文本快速输入工具)破解版安装
1.软件简介 Rocket Typist 是 macOS 系统上一款增强型文本快速输入工具,我们可以利用这款工具预先设置保存好很多日常生活学习或是工作中常用的文本片段,还能设定部分内容为变量,当 ...
- 有关Linux下request.getRealPath("/")获取路径的问题
request.getRealPath("/") 在window获取的是服务器的根目录,结尾包含分隔符, 如E:\apache-tomcat-6.0.29-bak\apache-t ...
- [转]设备唯一标识方法(Unique Identifier):如何在Windows系统上获取设备的唯一标识
原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保 ...
- python3版本中的zip函数
例如,有两个列表: 1 2 >>>a = [1,2,3] >>>b = [4,5,6] 使用zip()函数来可以把列表合并,并创建一个元组对的列表. 1 2 > ...
- vue设置默认地址和配送方式
1.截图 2.address.html <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- python(60):configparser 函数,配置文件
ConfigParser模块学习 介绍 ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每 ...
- asp.net ashx一般处理程序实现async await异步操作
目前项目存在页面展示大量图片,效率不高,考虑优化性能,改为ashx+异步下载的方式,废话不说直接贴code: using System; using System.Web; using System. ...
- Jquery计算指定日期加上多少天、加多少月、加多少年的日期
/* * 功能:实现VBScript的DateAdd功能. * 参数:interval,字符串表达式,表示要添加的时间间隔. * 参数:number,数值表达式,表示要添加的时间间隔的个数. * 参数 ...
- 十分钟学会Charles抓包(iOS的http/https请求)
### 原文地址,感谢作者 : http://www.jianshu.com/p/5539599c7a25 Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Ch ...
- hdoj:2033
#include <iostream> #include <string> using namespace std; int main() { int n; int h, m, ...