矩阵压缩章节
来源:互联网 发布:tessanne chin 知乎 编辑:程序博客网 时间:2024/04/28 23:29
/* 书上98页的5.1算法 2009-10-30 14:28*/
/*
稀疏矩阵的转置 一般方法时间复杂在n.tu*m.tu
三元组存储矩阵。
*/
/*
测试数据:
6 7
0 12 9 0 0 0 0
0 0 0 0 0 0 0
-3 0 0 0 0 14 0
0 0 24 0 0 0 0
0 18 0 0 0 0 0
15 0 0 -7 0 0 0
正确的话应该输出:
1 3 -3
1 6 15
2 1 12
2 5 18
3 1 9
3 4 24
4 6 -7
6 3 14
*/
#include<stdio.h>
#define SIZE 100
typedef struct three
{
int i,j;
int key;
}data;
int input(data *list,int r,int c)
{
int i,j,x,t=0;
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
{
scanf("%d",&x);
if(x!=0)
{
list[t].i=i;
list[t].j=j;
list[t++].key=x;
}
}
return t;
}
void zz_matria(data *zlist,data *list,int t,int r,int c)
{
int i,j,q=0;
if(t)
{
for(i=1;i<=c;i++)
for(j=0;j<t;j++)
{
if(list[j].j==i)
{
zlist[q].i=list[j].j;zlist[q].j=list[j].i;zlist[q++].key=list[j].key;
}
}
}
}
int main()
{
int r,c,t,i;
data list[SIZE],zlist[SIZE];
while(scanf("%d%d",&r,&c)!=EOF)
{
t=input(list,r,c);//t为非0元素个数
zz_matria(zlist,list,t,r,c);
// printf("%d/n",t);
for(i=0;i<t;i++)
{
printf("%d %d %d/n",zlist[i].i,zlist[i].j,zlist[i].key);
}
}
return 0;
}
--------------------
/*
稀疏矩阵的转置 m+n时间复杂 改进
三元组存储矩阵。
*/
/*
测试数据:
6 7
0 12 9 0 0 0 0
0 0 0 0 0 0 0
-3 0 0 0 0 14 0
0 0 24 0 0 0 0
0 18 0 0 0 0 0
15 0 0 -7 0 0 0
正确的话应该输出:
1 3 -3
1 6 15
2 1 12
2 5 18
3 1 9
3 4 24
4 6 -7
6 3 14
*/
#include<stdio.h>
#include<string.h>
#define SIZE 100
typedef struct three
{
int i,j;
int key;
}data;
int input(data *list,int r,int c)
{
int i,j,x,t=0;
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
{
scanf("%d",&x);
if(x!=0)
{
list[t].i=i;
list[t].j=j;
list[t++].key=x;
}
}
return t;
}
void zhuan(data *zlist,data *list,int t,int c)
{
int i,p,q,j;
int num[SIZE],cpot[SIZE];
memset(num,0,sizeof(num));
for(j=0;j<t;j++)
{
num[list[j].j]++;
}
cpot[1]=1;
for(i=2;i<=c;i++)
{
cpot[i]=cpot[i-1]+num[i-1];
//printf("%d ",cpot[i]);
}
//for(i=1;i<=c;i++)
// printf("%d ",cpot[i]);
//////////处理了num与copt////////////
for(p=0;p<t;p++)
{
q=list[p].j;
zlist[cpot[q]].i=list[p].j;
zlist[cpot[q]].j=list[p].i;
zlist[cpot[q]].key=list[p].key;
cpot[q]++;
}
}
int main()
{
int r,c,t,i;
data list[SIZE],zlist[SIZE];
while(scanf("%d%d",&r,&c)!=EOF)
{
t=input(list,r,c);//t为非0元素个数
zhuan(zlist,list,t,c);
// printf("%d/n",t);
for(i=1;i<=t;i++)
{
printf("%d %d %d/n",zlist[i].i,zlist[i].j,zlist[i].key);
}
}
return 0;
}
- 矩阵压缩章节
- 压缩矩阵
- 压缩矩阵
- 矩阵压缩
- 稀疏矩阵的压缩矩阵
- 矩阵的压缩存储
- 对称矩阵压缩存储
- 矩阵压缩存储
- 矩阵的压缩存储
- 对称矩阵压缩存储
- 稀疏矩阵压缩存储
- 矩阵的压缩存储
- 对称矩阵的压缩
- 矩阵的压缩存储
- 稀疏矩阵的压缩
- 矩阵的压缩存储
- 【数据结构】压缩特殊矩阵
- 矩阵的压缩存储
- JFreeChart学习(一)
- problem installing JDK on debian
- 学习练习
- 如何让MyEclipse的代码提示功能和VS一样强大
- linux下挂载(mount)光盘镜像文件、移动硬盘、U盘、Windows和NFS网络共享
- 矩阵压缩章节
- 在C++中调用C写的函数(使用lex_yacc遇到的问题)
- 尚邮做得真不错 前景广阔
- ASP.NET MVC 简介
- 函数指针
- Mount命令:Linux外置存储介质挂载方法
- 输出字符串
- 完全卸载Oracle方法
- C# 邮件发送(三种)