标题:稀疏矩阵转置
只看楼主
hdmiforc
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-1
结帖率:0
已结贴  问题点数:10 回复次数:8 
稀疏矩阵转置


求教为什么程序是结果错误,代码哪里有问题吗?
#include <stdio.h>
#include <stdlib.h>
#define MAX 400
typedef struct {
 int i,j,e;
}Triple;
typedef struct{
 Triple data[MAX];
 int mu,nu,tu;
}TSMatrix;
void Trans(TSMatrix A,TSMatrix *B){
 (*B).mu=A.nu;
 (*B).nu=A.mu;
 (*B).tu=A.tu;
 if((*B).tu){int q=0,col,p;
 for(col=1;col<=A.nu;col++){
    for(p=0;p<A.tu;p++){
        if(A.data[p].j==col){
            (*B).data[q].i=A.data[p].j;
            (*B).data[q].j=A.data[p].i;
            (*B).data[q].e=A.data[p].e;
            q++;
        }
    }
 }
 }
}
int main()
{
    int i,j,e,t=0;
    TSMatrix A,B;
    scanf("%d %d",&A.mu,&A.nu);
    scanf("%d %d %d",&i,&j,&e);
    while(i&&j&&e){
        A.data[t].i=i;
        A.data[t].j=j;
        A.data[t].e=e;
        t++;
        scanf("%d %d %d",&i,&j,&e);
    }
    A.tu=t;
    Trans(A,&B);
    for(t=0;t<B.tu;t++){
        printf("%d %d %d\n",B.data[t].i,B.data[t].j,B.data[t].e);
    }
    return 0;
}
搜索更多相关主题的帖子: 稀疏 矩阵 int data for 
2019-04-15 17:08
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:10 
//表示i、j、e都不为0执行,i、j和e不能取0吗?
while(i&&j&&e){
2019-04-15 17:46
hdmiforc
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-1
得分:0 
回复 2楼 word123
#include <stdio.h>
#include <stdlib.h>
#define MAX 400
typedef struct {
 int i,j,e;
}Triple;
typedef struct{
 Triple data[MAX];
 int mu,nu,tu;
}TSMatrix;
void Trans(TSMatrix A,TSMatrix *B){
 (*B).mu=A.nu;
 (*B).nu=A.mu;
 (*B).tu=A.tu;
 if((*B).tu){int q=0,col,p;
 for(col=1;col<=A.nu;col++){
    for(p=0;p<A.tu;p++){
        if(A.data[p].j==col){
            (*B).data[q].i=A.data[p].j;
            (*B).data[q].j=A.data[p].i;
            (*B).data[q].e=A.data[p].e;
            q++;
        }
    }
 }
 }
}
int main()
{
    int i,j,e,t;
    TSMatrix A,B;
    scanf("%d %d",&A.mu,&A.nu);
    A.tu=0;
      for (t=0; ; )
    {
        scanf("%d%d%d",&i,&j,&e);
        if(i==0&&j==0&&e==0)break;
        if(i&&j){
        A.data[t].i=i;
        A.data[t].j=j;
        A.data[t].e=e;
        A.tu++;
        t++;}
    }

    Trans(A,&B);
    for(t=0;t<B.tu;t++){
        printf("%d %d %d\n",B.data[t].i,B.data[t].j,B.data[t].e);
    }
    return 0;
}
加粗部分做了修改,结果是PE,不知道为什么
2019-04-15 22:32
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
i和j是从1开始的吗,e可以为0吗?

PE是什么?

[此贴子已经被作者于2019-4-15 22:40编辑过]

2019-04-15 22:36
hdmiforc
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-1
得分:0 
回复 4楼 word123
i和j是正整数,e应该可以为0的
PE就是数据错误,我也不太明白哪里有问题
2019-04-15 22:45
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
//这里输入数据格式和下面那个不一致
scanf("%d%d",&A.mu,&A.nu);
2019-04-15 22:46
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
//如果i和j都是正整数的话,这个判断也没必要
if(i&&j){
2019-04-15 22:48
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
//还有最后一个三元组输出的时候需要不要换行
printf("%d %d %d\n",B.data[t].i,B.data[t].j,B.data[t].e);
2019-04-15 22:54
hdmiforc
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2019-4-1
得分:0 
回复 8楼 word123
试过了还是不行
2019-04-16 19:37



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




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

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