3347-数据结构实验之数组三:快速转置
来源:互联网 发布:淘宝买东西后怎么评价 编辑:程序博客网 时间:2024/06/02 03:25
数据结构实验之数组三:快速转置
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
0 14 0 0 -5
0 -7 0 0 0
36 0 0 28 0
稀疏矩阵T
0 0 36
14 -7 0
0 0 0
0 0 28
-5 0 0
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
注
起初,我做这个题目和做《3348-数据结构实验之数组二:稀疏矩阵》时的做法一样,用了二维数组,先把非零元素存起来,然后转换后输出,这样做交上去也是超时
#include<stdio.h>#include<stdlib.h>#include<string.h>struct node{ int a,b,c;}s[11111],t;int main(){ int mu,nu,tu; int i,j,k; while(scanf("%d %d %d",&mu,&nu,&tu)!=EOF) { for(i=1;i<=tu;i++) scanf("%d%d %d",&s[i].a,&s[i].b,&s[i].c); for(i=1;i<tu;i++) { for(j=i+1;j<=tu;j++) { if(s[i].b>s[j].b)//把列按照从小到大的顺序排列 { t=s[j]; s[j]=s[i]; s[i]=t; } if(s[i].b==s[j].b)//在列相同的情况下 { if(s[i].a>s[j].a)//把行按照从小到大的顺序排列 { t=s[j]; s[j]=s[i]; s[i]=t; } } } } for(i=1;i<=tu;i++) printf("%d %d %d\n",s[i].b,s[i].a,s[i].c);//按照先输出列再输出行再输出元素的格式输出 } return 0;}
注
用结构体数组来存放输入的行、列、非零元素
并且把列按 从小到大的顺序排序,在列相同的情况下,把行按从小到大的顺序排序,然后再按照先输出行再输出列再输出元素。
超时代吗
#include<stdio.h>#include<stdlib.h>#include<string.h>int vis[10001][10001];int main(){ int mu,nu,tu; int i,j,k; int p,q,s; memset(vis,0,sizeof(vis)); while(scanf("%d %d%d",&mu,&nu,&tu)) { for(i=1;i<=tu;i++) { scanf("%d %d %d",&p,&q,&s); vis[p][q]=s; } for(i=1;i<=nu;i++) { for(j=1;j<=mu;j++) { if(vis[j][i]!=0)//输出时行列转换 printf("%d %d %d\n",i,j,vis[j][i]); } } } return 0;}
- SDUT 3347 数据结构实验之数组三:快速转置
- 3347 数据结构实验之数组三:快速转置
- 3347-数据结构实验之数组三:快速转置
- SDUT 3347 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置(sdut_3347)
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- SDUT3347数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 数据结构实验之数组三:快速转置
- 基数排序
- 移动web开发三之头部和底部
- Print Binary Tree问题及解法
- 使用ShellExecute函数打开IE浏览器下的新窗口
- android开发--ProgressBar 颜色/样式的设置
- 3347-数据结构实验之数组三:快速转置
- 进程间通信之messenger
- freemarker基本命令学习
- HDU 3729 I'm Telling the Truth(二分图最大匹配)
- ios百度地图更改罗盘指南针位置
- 测试
- Spring注解@Component、@Repository、@Service、@Controller区别
- 例题 4-5 追踪电子表格中的单元格(Spreadsheet Tracking) UVa 512
- c# 编码那么事