数据结构实验之数组三:快速转置
2016-08-10 15:36
239 查看
数据结构实验之数组三:快速转置
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
转置运算是一种最简单的矩阵运算,对于一个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
输入
连续输入多组数据,每组数据的第一行是三个整数mu, nu, tu(tu <= 50),分别表示稀疏矩阵的行数、列数和矩阵中非零元素的个数,随后tu行输入稀疏矩阵的非零元素所在的行、列值和非零元素的值,同一行数据之间用空格间隔。(矩阵以行序为主序)输出
输出转置后的稀疏矩阵的三元组顺序表表示。示例输入
3 5 51 2 141 5 -52 2 -73 1 363 4 28
示例输出
1 3 362 1 142 2 -74 3 285 1 -5
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
typedef struct
{
int x, y ;
int z;
} Syz;
Syz Zz(Syz *b, int T)
{
int i, j,k;
Syz M;
for(i=0; i<T; i++) //先转置,将x,y 互换。
{
k=b[i].x;
b[i].x=b[i].y;
b[i].y=k;
}
for(j=0; j<T-1; j++) //再排序,将转置好的按照先后顺序拍好
{
for(i=j+1; i<T; i++)
{
if(b[j].x>b[i].x)
{
M=b[j];
b[j]=b[i];
b[i]=M;
}
else if(b[j].x==b[i].x)
{
if(b[j].y>b[i].y)
{
M=b[j];
b[j]=b[i];
b[i]=M;
}
}
}
}
}
int main()
{
int m, n, t, i, j;
int h, l, z , c ;
int flag;
Syz a[1100];
while(cin>>m>>n>>t)
{
flag=0;
for(i=0; i<t; i++)
{
cin>>h>>l>>z;
a[i].z=z;
a[i].x=h;
a[i].y=l;
}
Zz(a,t);
for(i=0; i<t; i++){
cout<<a[i].x<<" "<<a[i].y<<" "<<a[i].z;
cout<<endl;
}
}
}
相关文章推荐
- socket常用数据结构
- 数据结构实验之二叉树四:还原二叉树
- 数据结构实验之二叉树七:叶子问题
- 【数据结构 笔记02】栈的应用
- SDUT oj 数据结构实验之二叉树三:统计叶子数
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构实验之查找四:二分查找
- SDUT OJ 数据结构实验之二叉树二:遍历二叉树
- 数据结构实验之排序四:寻找大富翁
- SDUT 数据结构实验之二叉树一:树的同构
- python的数据结构之数字和字符串(四)
- 【数据结构】栈的实现
- C++数据结构 之 链表_Linked List
- 数据结构
- C++数据结构 之 优先队列_Priority Queue
- 哈希算法
- C++数据结构 之 队列_Queue
- 数据结构实验之数组二:稀疏矩阵
- 数据结构实验之二叉树一:树的同构