标题:用三元组实现稀疏矩阵的乘法!
只看楼主
hzm19960111
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2015-9-29
结帖率:0
已结贴  问题点数:20 回复次数:2 
用三元组实现稀疏矩阵的乘法!
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 12500
typedef struct
{
    int i,j;
    int e;
} Triple;
typedef struct
{
    Triple data[MAXSIZE+1];
    int mu,nu,tu;
} TSMatrix;
int CreateSMatrix2(TSMatrix &A,TSMatrix &B)//正确
{
    int m,n,i,j,f,g,d,c,v,b;
    i=1;j=1;
    scanf("%d %d",&m,&n);
        A.mu=m;
        A.nu=n;
        A.tu=0;
while(1)
    {
        scanf("%d %d %d",&f,&g,&d);
        if(f==0&g==0&d==0)
        {break;}
        else
        A.data[i].i=f;
        A.data[i].j=g;
        A.data[i].e=d;
        A.tu++;
        i++;
    }
    scanf("%d %d",&m,&n);
        B.mu=m;
        B.nu=n;
        B.tu=0;
while(1)
    {
        scanf("%d %d %d",&c,&v,&b);
        if(c==0&v==0&b==0)
        {break;}
        else
        B.data[j].i=c;
        B.data[j].j=v;
        B.data[j].e=b;
        B.tu++;
        j++;
    }
    return 0;
}
int MultS(TSMatrix &A,TSMatrix &B,TSMatrix &C)
 { int k,p,crow,brow,q,ccol;
   int num[MAXSIZE],pos[MAXSIZE],ctemp[MAXSIZE];
    if (A.nu==B.mu)
       { for(k=1;k<=B.mu;k++)
            num[k]=0;
         for(k=1;k<=B.tu;k++)
            num[B.data[k].i]++;
        pos[1]=1;
         for(k=2;k<=B.tu;k++)
            pos[k]=pos[k-1]+num[k-1];
            pos[1+B.tu]=pos[B.tu]+1;
            C.mu=A.mu; C.nu=B.nu; C.tu=0; p=1;
        while(p<=A.tu)
         {crow=A.data[p].i;
          for(k=1;k<=C.nu;k++)
                  ctemp[k]=0;
                while (p<=A.tu&&A.data[p].i==crow)
                       {
                          brow=A.data[p].j;
                           for(q=pos[brow];q<=pos[brow+1]-1;q++)
                             {  ccol=B.data[q].j;
                                ctemp[ccol]=ctemp[ccol]+A.data[p].e*B.data[q].e;
                              }
                           p=p+1;
                        }
                          for(ccol=1;ccol<=B.nu;ccol++)
                             if(ctemp[ccol]!=0)
                               { C.tu=C.tu+1;
                                 C.data[C.tu].i=crow;
                                 C.data[C.tu].j=ccol;
                                 C.data[C.tu].e=ctemp[ccol];
                               }
        }
      }return 0;
 }


int main()
{

    TSMatrix A,B,C;
    int i;
    CreateSMatrix2(A,B);
    MultS(A,B,C);
    for(i=1;1;i++)
    {
        printf("%d %d %d\n",C.data[i].i,C.data[i].j,C.data[i].e);
        if(i>=C.tu)
            break;
    }
    return 0;
}

这是我的代码,我晕了,明明给的测试数据运行下来是对的可是提交后怎么都显示答案错误!调试了一天了也没发现啥问题。救救我!
搜索更多相关主题的帖子: include 三元 
2015-10-19 22:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
我将你的代码进行编译,编译失败,你这竟然是C++代码,你知道这里是C板块吗?

好吧,改为C++方式编译,编译器警告说 if(f==0&g==0&d==0) 这一行你可能将&&错写成&了,不知道你看到了没有?或许你够牛B不屑一顾吧

忽略掉警告,运行,竟然要手工输入数据,可是我找遍了你的帖子,没看到你贴出任何输入测试的数据。明白了,你就是希望别人浪费时间从代码中看出你需要输入什么,浪费别人一个时辰可节约自己复制粘贴的几秒钟,这是合算的

最后,还有一段,“明明给的测试数据运行下来是对的可是提交后怎么都显示答案错误!”,你在梦游吧,你都没告诉别人题目要求是什么,无论出来什么结果,别人也无法知道这结果是正确还是错误。
2015-10-21 12:46
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:10 
怎么也不描述一下题目要求和你的代码的具体错误情况

一片落叶掉进了回忆的流年。
2015-10-21 16:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-458344-1-1.html




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

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