SDUT 3347 数据结构实验之数组三:快速转置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDUT 3347 数据结构实验之数组三:快速转置相关的知识,希望对你有一定的参考价值。

数据结构实验之数组三:快速转置

Time Limit: 1000MS Memory Limit: 65536KB

Problem Description



转置运算是一种最简单的矩阵运算,对于一个m*n的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它的转置矩阵T是一个n*m的矩阵,且T( i , j )=M( j , i )。显然,一个稀疏矩阵的转置仍然是稀疏矩阵。你的任务是对给定一个m*n的稀疏矩阵( m , n < = 10000 ),求该矩阵的转置矩阵并输出。矩阵M和转置后的矩阵T如下图示例所示。
   
   稀疏矩阵M                             稀疏矩阵T

技术分享技术分享

Input

连续输入多组数据,每组数据的第一行是三个整数mu, nu, tu(tu <= 50),分别表示稀疏矩阵的行数、列数和矩阵中非零元素的个数,随后tu行输入稀疏矩阵的非零元素所在的行、列值和非零元素的值,同一行数据之间用空格间隔。(矩阵以行序为主序)

Output

输出转置后的稀疏矩阵的三元组顺序表表示。

Example Input

3 5 5
1 2 14
1 5 -5
2 2 -7
3 1 36
3 4 28

Example Output

1 3 36
2 1 14
2 2 -7
4 3 28
5 1 -5
DQE:
 
矩阵的快速转置,水。
 
 1 #include <iostream>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 struct TS
 7 {
 8     struct{int i,j;    int e;}data[10010];    //10000
 9     int nu,mu,tu;
10 };
11 
12 void zz(TS f,TS &z)
13 {
14     z.tu=f.tu;z.nu=f.mu;z.mu=f.nu;    //jscpy
15     int num[10010]={0},cpot[10010]={1};
16     int i;
17     for(i=1;i<=f.tu;i++)
18     {
19         num[f.data[i].j]++;
20     }
21     cpot[1]=1;
22     for(i=2;i<=z.nu;i++)
23     {
24         cpot[i]=cpot[i-1]+num[i-1];
25     }
26     for(i=1;i<=z.tu;i++)
27     {
28         int zi=f.data[i].j;
29         int zn=cpot[zi];
30         z.data[zn].e=f.data[i].e;
31         z.data[zn].i=f.data[i].j;
32         z.data[zn].j=f.data[i].i;
33         cpot[zi]++;
34     }
35 }
36 
37 int main()
38 {
39     TS f,z;
40     while(scanf("%d %d %d",&f.nu,&f.mu,&f.tu)!=EOF)
41     {
42         int i;
43         for(i=1;i<=f.tu;i++)    //in
44         {
45             scanf("%d %d %d",&f.data[i].i,&f.data[i].j,&f.data[i].e);
46         }
47 
48         zz(f,z);
49 
50         for(i=1;i<=z.tu;i++)    //out
51         {
52             printf("%d %d %d\n",z.data[i].i,z.data[i].j,z.data[i].e);
53         }
54     }
55     return 0;
56 }
57 
58 /***************************************************
59 User name: ***
60 Result: Accepted
61 Take time: 0ms
62 Take Memory: 464KB
63 Submit time: 2016-10-12 16:19:44
64 ****************************************************/

 





以上是关于SDUT 3347 数据结构实验之数组三:快速转置的主要内容,如果未能解决你的问题,请参考以下文章

SDUT 3375 数据结构实验之查找三:树的种类统计

SDUT-3400_数据结构实验之排序三:bucket sort

SDUT-3398_数据结构实验之排序一:一趟快排

SDUT 3399 数据结构实验之排序二:交换排序

SDUT 3398 数据结构实验之排序一:一趟快排

SDUT-3399_数据结构实验之排序二:交换排序