关于三元组的初级问题,请教!!!

tukidrmyd 2006-04-11 05:54:10
此程序的加法和乘法不能通过编绎,我检查不出有什么问题,请高手支招!!!!


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#define MAXSIZE 12500
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct{
int i,j;
ElemType e;
}Triple;
typedef struct{
Triple data[MAXSIZE+1];
int rpos[128];
int mu,nu,tu;//矩阵的行数、列数和非零元个数
}TSMatrix;
Status TransposeSMatrix(TSMatrix M,TSMatrix &T){
//采用三元组表存储表示,求稀疏矩阵M的转置矩阵T
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
if(T.tu){
int q=1;
for(int col=1;col<=M.nu;++col)
for(int p=1;p<=M.tu ;++p)
if(M.data[p].j==col){
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
++q;
}
}
return OK;
}
Status FastTransposeSMatrix(TSMatrix M,TSMatrix &T){
//采用三元组表存储表示,求稀疏矩阵M的转置矩阵T
int col,t,p,q,num[MAXSIZE],cpot[MAXSIZE];;
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
if(T.tu){
for(col=1;col<=M.nu;++col) num[col]=0;
for(t=1;t<=M.tu;++t) ++num[M.data[t].j];
cpot[1]=1;
//求第COL列中第一个非零元在b.data中的序号
for(col=2;col<=M.nu;++col) cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;++p){
col=M.data[p].j; q=cpot[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
++cpot[col];
}//for
}//if
return OK;
}

void SetIt(TSMatrix &M,TSMatrix &T,TSMatrix &SUM,TSMatrix &RES){
printf("现初始化...\n");
M.mu=4;M.nu=4;M.tu=6;
M.data[1].i=1;M.data[1].j=1;M.data[1].e=1;
M.data[2].i=1;M.data[2].j=3;M.data[2].e=3;
M.data[3].i=2;M.data[3].j=2;M.data[3].e=1;
M.data[4].i=3;M.data[4].j=3;M.data[4].e=1;
M.data[5].i=4;M.data[5].j=3;M.data[5].e=1;
M.data[6].i=4;M.data[6].j=4;M.data[6].e=1;
T.mu=4;T.nu=4;T.tu=4;
T.data[1].i=1;T.data[1].j=1;T.data[1].e=3;
T.data[2].i=2;T.data[2].j=2;T.data[2].e=4;
T.data[3].i=3;T.data[3].j=3;T.data[3].e=1;
T.data[4].i=4;T.data[4].j=4;T.data[4].e=2;
SUM.mu=M.mu;SUM.nu=M.nu;SUM.tu=M.mu*M.nu;
RES.mu=M.mu;RES.nu=M.nu;RES.tu=M.mu*M.nu;
}
int GetTSMatrix(TSMatrix M,int i,int j){
int flag=1,temp;
for(int k=1;k<=M.tu;k++)
if(i==M.data[k].i&&j==M.data[k].j){
temp=M.data[k].e;
flag=0;
break;
}
if(flag) return 0;
else return temp;
}

void AddTSMatrix(TSMatrix M,TSMatrix N,TSMatrix &SUM){
int i,j,k=1;
for(i=1;i<=M.nu;i++)
for(j=1;j<=M.mu;j++){
SUM.data[k].e=GetTSMatrix(N,i,j)+GetTSMatrix(M,i,j);
printf("TEST3\n");
SUM.data[k].i=i;
SUM.data[k].j=j;
k++;
}
}

void MulTSMatrix(TSMatrix M,TSMatrix N,TSMatrix &RES){
int i,j,k=1;
for(i=1;i<=M.nu;i++)
for(j=1;j<=M.mu;j++){
RES.data[k].e=0;
for(int i1=1,j1=1;i1<=M.nu&&j1<=M.mu;i1++,j1++)
RES.data[k].e+=GetTSMatrix(M,i,j1)+GetTSMatrix(N,i1,j);
RES.data[k].i=i;
RES.data[k].j=j;
k++;
}
}

void Display(TSMatrix T){
int i,j,k=1;
for (i=1;i<T.mu+1;i++){
for (j=1;j<T.nu+1;j++)
if (T.data[k].i==i&&T.data[k].j==j){
cout<<T.data[k].e<<" ";
k++;
}
else cout<<0<<" ";
cout<<endl;
}
cout<<endl;
}




void main(){
TSMatrix M,N,SUM,RES;
SetIt(M,N,SUM,RES);
printf("M is:\n");
Display(M);
printf("N is:\n");
Display(N);
AddTSMatrix(M,N,SUM);
printf("SUM is :\n");
Display(SUM);
cout<<endl;
MulTSMatrix(M,N,RES);
Display(RES);
// printf("\n%d\n",GetTSMatrix(M,1,3)); //测试函数GetTSMatrix();
}











...全文
129 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tukidrmyd 2007-04-11
  • 打赏
  • 举报
回复
看来中国还是少有程序员对数据结构很关心啊
GaoXX 2006-04-16
  • 打赏
  • 举报
回复
顶一下
jixingzhong 2006-04-11
  • 打赏
  • 举报
回复
先 MARK ,
有空再看看 ~

^_^

33,317

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧