| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 843 人关注过本帖
标题:作业不会做啊
只看楼主 加入收藏
zxy303
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-11-3
收藏
 问题点数:0 回复次数:5 
作业不会做啊
大家帮帮忙阿,我要写个稀疏矩阵三元组的加法
麻烦大家帮帮忙了,感激不尽
搜索更多相关主题的帖子: 三元 作业 加法 矩阵 感激不尽 
2005-11-03 14:57
IT_BoBo
Rank: 1
等 级:新手上路
帖 子:623
专家分:0
注 册:2005-11-1
收藏
得分:0 

稀疏矩阵三元组的加法,乘法


#include<stdio.h>
typedef struct
{
int data[100][100];
int m,n;
}matrix;
typedef int spmatrix[100][3];
void compress(matrix *a,spmatrix b)
{
int i,j,k=1;
for (i=0;i<(*a).m ;i++)
for (j=0;j<(*a).n;j++)
if ((*a).data [i][j]!=0)
{
b[k][0]=i;
b[k][1]=j;
b[k][2]=(*a).data [i][j];
k++;
}
b[0][0]=(*a).m;
b[0][1]=(*a).n ;
b[0][2]=k-1;
}
void recompress(matrix *a,spmatrix b)
{
int i,j,k=1;
for (i=0;i<b[0][0];i++)
for (j=0;j<b[0][1];j++)
(*a).data [i][j]=0;
for (k=1;k<=b[0][2];k++)
(*a).data [b[k][0]][b[k][1]]=b[k][2];
}
void print(matrix *a)

{
int i,j;
for (i=0;i<(*a).m ;i++)
{ for(j=0;j<(*a).n ;j++)

printf("%-4d",(*a).data [i][j]);
putchar('\n');
}

}
void prints(spmatrix b)
{

int i;
for (i=0;i<=b[0][2];i++)
printf("%-5d%-5d%-6d\n",b[i][0],b[i][1],b[i][2]);

}
void mulit(matrix *a,matrix *b,matrix *c)
{
int i,j,k;
int s;
(*c).m=(*a).m;
(*c).n=(*b).n;
for (i=0;i<(*a).m;i++)


for (k=0;k<(*b).n;k++)
{ s=0;
for (j=0;j<(*a).n;j++)
s+=(*a).data [i][j]*(*b).data [j][k];
(*c).data [i][k]=s;
}

}
int getvalue(spmatrix a,int x,int y)
{
int z=1;

while ( ( a[z][0]!=x || a[z][1]!=y) && z<=a[0][2] )
z++;
if (z==a[0][2] +1) return 0;
else return a[z][2];
}
void mulits(spmatrix a,spmatrix b,spmatrix c)
{

int i,j,k,s,n=1;
for (i=0;i<a[0][0];i++)
for (k=0;k<b[0][1];k++)
{ s=0;
for (j=0;j<a[0][1];j++)
s+=getvalue(a,i,j) *getvalue(b,j,k);
if (s)
{
c[n][2]=s;
c[n][0]=i;
c[n][1]=k;
n++;
}
}

c[0][0]=a[0][0];
c[0][1]=b[0][1];
c[0][2]=n-1;
}


void add(matrix *a,matrix *b,matrix *c)
{

int i=0,j=0 ;
for (i=0;i<(*a).m ;i++)
for (j=0;j<(*a).n ;j++)
(*c).data [i][j]=(*a).data [i][j]+(*b).data [i][j];
(*c).m=(*a).m;
(*c).n=(*a).n;
}
void adds(spmatrix a,spmatrix b,spmatrix c)
{
int i=0,j=0,k=0;
while (i<=a[k][2] && j<=b[k][2])
{
if (a[i][0]==b[j][0])
{
if (a[i][1]<b[j][1])
{
c[k][0]=a[i][0];
c[k][1]=a[i][1];
c[k][2]=a[i][2];
i++;
}
else if (a[i][1]>b[j][1])
{
c[k][0]=b[j][0];
c[k][1]=b[j][1];
c[k][2]=b[j][2];
j++;
}
else
{
c[k][0]=a[i][0];
c[k][1]=a[i][1];
c[k][2]=a[i][2]+b[i][2];
i++;
j++;
}
}
else if (a[i][1]<b[j][1])
{
c[k][0]=a[i][0];
c[k][1]=a[i][1];
c[k][2]=a[i][2];
i++;
}
else
{
c[k][0]=b[j][0];
c[k][1]=b[j][1];
c[k][2]=b[j][2];
j++;
}
k++;
}
if (i==a[0][2])
for (i=j;j<=b[0][2];i++)
{
c[k][0]=b[j][0];
c[k][1]=b[j][1];
c[k][2]=b[j][2];
k++;

}
else if (j=b[0][2])
for (j=i;j<=a[0][2];j++)
{
c[k][0]=a[i][0];
c[k][1]=a[i][1];
c[k][2]=a[i][2];
k++;
}

c[0][0]=a[0][0];
c[0][1]=a[0][1];
c[0][2]=k-1;

}
int main(int argc, char* argv[])
{

int i,j;
matrix a,b,c;
spmatrix a0,b0,c0;
a.m=b.m=3;
a.n=b.n=3;
for(i=0;i<a.m;i++)
for (j=0;j<a.n;j++)
{ printf("a[%d][%d]=",i,j);
scanf("%d",&a.data [i][j]);
b.data [i][j]=a.data [i][j]-3;
}
printf("matrix a is \n");
print(&a);
printf("matrix b is \n");
print(&b);
compress(&a,a0);
compress(&b,b0);
printf("spmatrix a0 is \n");
prints(a0);
printf("spmatrix b0 is \n");
prints(b0);
add(&a,&b,&c);
printf("matrix c is \n");

print(&c);
adds(a0,b0,c0);
printf("spmatrix c0 is \n");

prints(c0);

printf("other test\n");
mulit(&a,&b,&c);
print(&c);
putchar('\n');
compress(&a,a0);
compress(&b,b0);
mulits(a0,b0,c0);
recompress(&c,c0);
print(&c);
return 0;
}


……吹、吹、吹个大气球,吹大了气球玩球球……
2005-11-06 17:13
城市英雄
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2005-11-8
收藏
得分:0 
帮帮忙,我还没入门。
以知一个群体中有n个人,这些人之间可能存在同学关系,用数据模型来描叙这一关系,并给出可能的基本运算。

2005-11-08 14:36
城市英雄
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2005-11-8
收藏
得分:0 
数据模型有那些啊?

2005-11-08 14:40
IT_BoBo
Rank: 1
等 级:新手上路
帖 子:623
专家分:0
注 册:2005-11-1
收藏
得分:0 

老兄^我是入过门,不过现在都出远门好久了,那里还记得啊……再加上你在回帖里求问,没人告诉你的。自己发新帖可能会有人告诉你。


……吹、吹、吹个大气球,吹大了气球玩球球……
2005-11-09 00:37
IT_BoBo
Rank: 1
等 级:新手上路
帖 子:623
专家分:0
注 册:2005-11-1
收藏
得分:0 

……吹、吹、吹个大气球,吹大了气球玩球球……
2005-11-09 00:48
快速回复:作业不会做啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033773 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved