请问这个稀疏矩阵转置的代码哪组测试数据不对??我没有测试出来。

图片说明

#include<stdio.h>
#define MAX_SIZE 100
#define OK 1
#define ERROR -1
typedef int ElemType;
typedef int Status;
typedef struct {
    int i, j;
    ElemType e;
}Triple;
typedef struct {
    Triple data[MAX_SIZE];
    int mu, nu, tu;
}TSMatrix;

Status creatSMatrix(TSMatrix &M) {
    int row, col,  k = 0;
    scanf("%d %d", &M.mu, &M.nu);
    for(row = 1; row <= M.mu; row++) {
        for(col = 1; col <= M.nu; col++) {
            scanf("%d", &M.data[k].e);
            if(M.data[k].e) {
                M.data[k].i = row;
                M.data[k].j = col;
                k++;
            }
        }
    }
    M.tu = k;
//  printf("k = %d\n", k);
    return OK;
}

Status printfMatrix(TSMatrix M) {
    int row, col, temp, k = 0;
//  printf("T.mu=%d T.nu=%d\n", M.mu, M.nu);
    for(row = 1; row <= M.mu; row++) {
        for(col = 1; col <= M.nu; col++) {
            if(row == M.data[k].i && col == M.data[k].j) {
                printf("%d ", M.data[k].e);
                k++;
            }
            else
                printf("0 ");
        }
        printf("\n");
    }
}

Status transportSMatrix(TSMatrix M, TSMatrix &T) {
    int col, p, k = 0;
    T.mu = M.nu;
    T.nu = M.mu;
    T.tu = M.tu;
    for(col = 1; col <= M.nu; col ++){
        for(p = 0; p < M.tu; p ++){
            if(col == M.data[p].j) {
                T.data[k].i = M.data[p].j;
                T.data[k].j = M.data[p].i;
                T.data[k].e = M.data[p].e;
                k ++;
            }
        }
    }
//  printf("M.data[1].j=%d k = %d\n", M.data[1].j, k);
}

Status destoryMatrix(TSMatrix &M){
    M.mu = M.nu = M.tu = 0;
}

int main() {
    TSMatrix M, T;
    creatSMatrix(M);
    transportSMatrix(M, T);
    printfMatrix(T);
    destoryMatrix(M);
    return 0;
}


0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
数据结构29——稀疏矩阵转置
Description输出稀疏矩阵的转置矩阵。(行列均不大于20)Input第一行输入两个正整数n和m,分别表示矩阵的行数和列数,然后输入矩阵三元组,最后输入(0 0 0)表示结束输入。Output转置后的矩阵。Sample Input 4 4 1 1 1 2 1 2 3 2 3 0 0 0Sample Output1 1 1 1 2 2 2 3 3#include&amp;lt;stdio.h&amp;gt; ...
数据结构稀疏矩阵的实现及转置
昨天在机房没有做出来,我想了很久,都不知道原因。在机房时就是不明白那些Triple和TSMatrix结构之间的联系。不知道如何进行数据输入和输出。       且我一直在思考如果创建矩阵成功,又如何将其可视化的输出呢,就像我们看数学课本上的矩阵那样。今天晚上才明白过了。三元组顺序表实际是将看似非线性的矩阵实现了线性化的存储。不过现在看来我真正理解那个矩阵转置算法还需花时间。数据结构与算法的这个矩
C语言数据结构——稀疏矩阵的转置
#include<stdio.h> #include<stdlib.h> #include<stdarg.h>#define OK 1 #define MAXSIZE 12500typedef int Status;typedef struct { int i,j; int e; }Triple;typedef struct { Triple data[MAXSIZE+1]
C++_稀疏矩阵转置
问题描述 问题描述:稀疏矩阵转置 设计思路 设计思路:稀疏矩阵中存在大量非零元素,直接转置执行时间较高。因而采用三元组表示。按照压缩的概念,只存储稀疏矩阵中的非零元素,除了存储非零元素的值之外,还必须同时记下它所在的行列位置。三元组表示法是用一个具有三个数据域的一维数组表示稀疏矩阵,每一行有三个字段,分别该元素的行下表、列下表和值。设A,B分别为某稀疏矩阵转置前后的三元组表,i为行下标,j为...
《数据结构》复习之稀疏矩阵(矩阵转置)
矩阵的表示方法 矩阵的转置矩阵的表示方法  矩阵在数据结构中常用二维数组(int A[m][n],m为列的元素个数,n为行的元素个数)表示,这也是最简单的表示方法。   然而当矩阵中含有大量0元素时,也称为稀疏矩阵,这样的表示方法会浪费大量的存储空间,为了节省存储单元,最好只存非零元素。常用的存储稀疏矩阵的方法有顺序存储和链式存储两种,这里只介绍顺序存储。   稀疏矩阵的顺序存储方法也被称为三元
稀疏矩阵的转置(矩阵转置和快速转置)
原理是:如果能预先确定矩阵M中每一列(即T中每一行)的第一个非零元在b.data中(上面那图是b.data)恰当位置。那么在对a.data中的三元组一次做转置时,便可直接放到b.data中恰当的位置上去。设两个向量:num和cpotnum[col]表示矩阵M中第col列中的非零元素个数。cpot[col]指M中第col列的第一个非零元在b.data中的恰当位置。有下面两个公式:cpot[0]=0;...
几大常用排序算法编写及正确性、效率测试
排序算法写了几遍,总是过段时间就忘,故在此汇总下。 写排序算法重要的是理解它的原理,找到如何遍历及遍历和终止的条件插入排序从左建立有序区,将右侧的值依次插入该有序区,有序区中从插入的位置开始依次后移一位;从左往右遍历void InsertSort(std::vector<int>& datas) { //等待排序区间,插入到有序区 for(size_t i = 1; i < datas.s
【数据结构】稀疏矩阵的压缩存储和转置算法(C++代码)
稀疏矩阵的压缩存储和转置算法
NOJ-稀疏矩阵转置-西工大数据结构
上周就做完了,拖了一周今天才来写。题目如下:    看一下题目,就是创建三元组表然后转置再输出。    我采取的方法是,先得到矩阵每一列非0元的个数,那么每一列第一个元素在新的三元表中的位置就是上一列的非0元的个数加上上一列第一个元素在新三元表的位置之和。示例如下:      以下是我的实现:#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt...
【稀疏矩阵转置】线性时间复杂度实现稀疏矩阵转置
Think: 1知识点:线性时间复杂度实现稀疏矩阵转置 2方法: (1):通过三元组记录初始输入信息 (2):记录每一列的元素个数 (3):求得记录每一列的第一个元素应放置的转置三元组的位置 3反思: (1):记录的是每一列的第一个元素应放置的转置三元组的位置,[1, nu]而不是[1, tu]例题: SDUT——数据结构实验之数组三:快速转置Problem Description
C语言数据结构 两种算法实现 稀疏矩阵 转置
  普通算法实现稀疏矩阵转置(思路看代码注释) /*C语言数据结构 *普通算法实现稀疏矩阵装置 */ /*测试数据:mu:6 nu:6 tu:8 矩阵如下: 0 12 9 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 14 0 0 24 0 0 0 0 18 0 0 0 0 15 0 0 -7 0 0...
源代码——三元组实现稀疏矩阵及其转置
//三元组数值有一个特点:那就是在不同位置上的行值相同的元素 //一定是按照列值升序出现的。 #define _CRT_SECURE_NO_WARNINGS #include #include #include typedef struct TRIPLE//三元组成员 { int row; int col; int value; }TRIPLE; typedef struct T
各类排序算法生成与测试样例代码
来源自我的博客 http://www.yingzinanfei.com/2017/04/01/geleipaixusuanfashengchengyuceshiyanglidaima/ #include <iostream> #include <vector> #include <random> #include <algorithm> #include <functional> #includ
C语言:稀疏矩阵的转置
/* 稀疏矩阵的相关操作 1.存储:三元组结构,存储行、列、值 2.转置: 1)按照列数进行转置,2)按照三元组的次数进行转置,快速转置 */ # include # include //定义三元组 typedef struct { int x; //横坐标 int y; //纵坐标 int v; //值 }Tri; //定义稀疏矩阵的顺序存储结构 typedef str
稀疏矩阵的快速转置(C语言版)
#include #include #define MAX 100 typedef struct node{     int i,j,v; }SYZ; void createlist(SYZ *L,SYZ a[MAX],int x,int y,int z){     int n=0;     a[n].i=x;  a[n].j=y;  a[n].v=z;     n++;
【数据结构】稀疏矩阵的二种转置方法
稀疏矩阵 稀疏矩阵每个元素由3个元素组成,所以原数据1/3以下存储划算。 矩阵的转置如果简单调换行和列,会使行优先变成列优先。 代码收获 稀疏矩阵里嵌套的结构体是数组形式,分配给总的那个结构体空间后不用另外给他分配空间。 插入数据除了自己写方法外,还可以使用数组插入int a[]={1,2,4,5,6}然后使用循环把数据弄进去。 快速定位就是算位置,最后调换过程直接想容易搞蒙,一步步写出中间...
【LB】稀疏矩阵的快速转置原理及其算法
关于稀疏矩阵的快速转置法,首先得明白其是通过对三元表进行转置。如果误以为是对矩阵进行转置,毫无疑问就算你想破脑袋也想不出个所以然,别陷入死胡同了!          对于一个三元表,行为i,列为j,值为v。需将其i与j的值对调才能得到新的三元表,但是如果直接进行转换,得到的新的三元表的顺序是混乱的,不符合三元表的规则。所以,课本首先介绍了一个用扫描来转置的算法(这个算法比较容易,在这里我就不
c语言小练习——自定义一个矩阵,将这个矩阵转置
#include &amp;lt;stdio.h&amp;gt; #define clo 3 #define len 2 int main(int argc, const char *argv[]) {  int a[len][clo]={{1,2,3},{4,5,6}};    int i,j,t; for(i=0;i&amp;lt;clo;i++) {     for(j=0;j&amp;lt;len;j++)     {...
稀疏矩阵的存储方式及其快速转置的实现
稀疏矩阵: M*N的矩阵,矩阵中有效值的个数远小于无效值的个数,且这些数据的分布没有规律。 如下图矩阵: 稀疏矩阵的压缩存储方式: 压缩存储极少数的有效数据。使用{row,col,value}三元组存储每一个有效数据,三元组按原矩阵中的位置,以行优先级先后顺序依次存放(以便转置打印矩阵)。 稀疏矩阵的转置: (1)将存储的有效数据行优先存储改为按
三元组稀疏矩阵快速转置
稀疏矩阵是只存储非零元的行值、列值、元素值 data[0]来存储矩阵的行数、列数、非零元个数 struct Position { int row; int col; int value; }; struct List { Position data[MAX + 1]; }; void Quick_Transpose (List l, List &amp;amp;amp;s) ...
稀疏矩阵的转置C++代码(报告)
稀疏矩阵可由表示非零元及其行列数唯一确定,矩阵的转置运算只要做到:1、将矩阵的行列值相互交换;2、将每个三元组中的行与列相互调换;3、重排三元组之间的次序便可实现矩阵的转置。
稀疏矩阵的十字链表表示方法:矩阵加减乘法运算、矩阵转置运算、矩阵项的插入、矩阵行列链表的排序
稀疏矩阵的十字链表表示方法:矩阵加减乘法运算、矩阵转置运算、矩阵项的插入、矩阵行列链表的排序
CUDA之矩阵转置程序优化实例
Catalog 已经达到极限了?影响代码性能的两个主要方面优化代码内存操作 看代码内存操作是否有效——DRAM utilizationcoalesce合并从little’s Law中找继续优化的方法SM中的occupancy占用率 优化代码计算性能 减小线程发散度选择效率更高的数学计算 已经达到极限了? 经过了对行、各元素并行化处理,OK,似乎目前得到了一个还不
数据结构实验 矩阵的转置
这次的实验是完成矩阵的转置: 有两种方法可以实现,一种是直接按照列的值进行重排,另一种是快速转置 储存压缩矩阵有两种方式,一种是用二维数组来储存三元组,另一种是直接写在结构体里 (注意:用二维数组储存三元组的方法很好用,使用于出现三个变量,eg:x,y,val这种形式,在ACM也经常用到) 方法一: #include #include #include #include us
C语言数据结构——稀疏矩阵的快速转置
#include<stdio.h> #include<stdlib.h> #include<stdarg.h>#define OK 1 #define MAXSIZE 12500typedef int Status;typedef struct { int i; int j; int e; }Triple;typedef struct { int mu; in
矩阵(稀疏矩阵)的转置算法(C语言)详解
矩阵(包括稀疏矩阵)的转置,即互换矩阵中所有元素的行标和列标,如图1 所示: 图 1 矩阵转置示意图 但如果想通过程序实现矩阵的转置,互换行标和列标只是第一步。因为实现矩阵转置的前提是将矩阵存储起来,数据结构中提供了 3 种存储矩阵的结构,分别是三元组顺序表、行逻辑链...
稀疏矩阵的十字链表实现:行列链表
稀疏矩阵的十字链表实现
稀疏矩阵的初始化及其转置(源代码+截图)
稀疏矩阵:如果在矩阵中,多数的元素为0,通常认为非零元素比上矩阵所有元素的值小于等于0.05时,则称此矩阵为稀疏矩阵(sparse matrix)。
c数据结构稀疏矩阵快速转置
c数据结构实验 稀疏矩阵三元压缩存储 稀疏矩阵快速转置
数据结构——c语言描述 第五章 (2) 稀疏矩阵的转置算法
数据结构笔记
NOIP2018普及组&提高组官方测试数据
NOIP2018普及组官方测试数据
数据结构之稀疏矩阵转置
#include&lt;stdio.h&gt; #define MAXSIZE 10 typedef struct{ int row,col; int e; }Triple; typedef struct{ Triple data[MAXSIZE+1]; int m,n,len; }Matrix; void TranposeMatrix(Matrix A,Matri...
稀疏矩阵转置
本程序用了两种方法实现了矩阵转置,进行了比较,时间复杂度不同,分别为矩阵的行数乘以非零元个数,和矩阵的行数加上非零元个数。
三元组求稀疏矩阵的转置
将非零元素所在的行、列以及它的值构成一个三元组(row,col,value),然后再按某种规律存储这些三元组,这种方法可以节约存储空间。 算法思想 直接按照稀疏矩阵A的三元组表A.value的次序依次顺序转换,并将转换后的三元组放置于三元组表B.value的恰当位置。 为了算出每个三元组的具体位置,设两个辅助向量num[ ]和cpot[ ] 。 ◆ num[col]:统计稀疏矩阵A中第co
对称矩阵&稀疏矩阵的两种转置算法
SymmentryMatrix(对称矩阵)     对称矩阵和对称矩阵的压缩存储>  设一个N*N的方阵Array,Array中任意元素Arrayij,当且仅当Arrayij == Arrayji(0  我们发现如果将该对称矩阵的每个元素都存入则会存在内存浪费问题,那仫如何解决? 这就提到了对称矩阵的压缩存储了--则只需要存储上三角或者下三角的元素即可。      注意:
稀疏矩阵转置算法
在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵,并用三元组表存储。用C++ 扫描两遍三元组表实现稀疏矩阵转置
【C++】稀疏矩阵的普通转置与快速转置
因为稀疏矩阵的有效元素个数较少,所以以行优先的顺序把有效元素的信息封装在一个三元组中存储在顺序表里 #include #include using namespace std; #define M 5 #define N 6 struct Tuple { int _row; int _col; int _value; }; class SparseMatrix { public: Sp
多组测试数据求最大值
Description 输入一些整数,求最大值 Input 多组测试数据 首先输入1个整数n表示测试组数 然后每行首先输入1个整数m,再输入m个整数 Output 对于每组测试数据输出1行,内容为m个整数的最大值 #include&amp;lt;stdio.h&amp;gt; int main() { int n,i; scanf(&quot;%d&quot;,&amp;amp;n); for(i=1;i&amp;lt;=n;i++) { int ...
稀疏矩阵——实现算法5.1、5.2
      严版数据结构99页。      IDE:
NOIP2017官方测试数据
noip2017 、官方测试数据、包含普及组和提高组两个组别的测试数据。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 我现在java培训出来 我学python