| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 123 人关注过本帖
标题:稀疏矩阵转置
只看楼主 加入收藏
hdmiforc
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2019-4-1
  问题点数: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;
}
附件: 您没有浏览附件的权限,请 登录注册
5 天前 17:08
word123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:11
帖 子:312
专家分:1422
注 册:2014-4-5
  得分:0 
//表示i、j、e都不为0执行,i、j和e不能取0吗?
while(i&&j&&e){
5 天前 17:46
hdmiforc
Rank: 1
等 级:新手上路
帖 子:11
专家分: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,不知道为什么
5 天前 22:32
word123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:11
帖 子:312
专家分:1422
注 册:2014-4-5
  得分:0 
i和j是从1开始的吗,e可以为0吗?

PE是什么?

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

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







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

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