| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 556 人关注过本帖
标题:请问,这个矩阵转换的程序错在哪儿,怎么改。谢谢!!!
取消只看楼主 加入收藏
宇宙614
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-3
结帖率:100%
收藏
 问题点数:0 回复次数:0 
请问,这个矩阵转换的程序错在哪儿,怎么改。谢谢!!!
#include <stdio.h>
#include <stdlib.h>
#define maxsize 10000     /*假设非零元个数的最大值为10000*/
typedef struct
{  
    int i,j;      /*该非零元的行下标和列下标*/
    int e;
}Triple;
typedef struct
{
    Triple data[maxsize+1];
    int mu,nu,tu;
}TSMatrix;
TSMatrix * create(TSMatrix *M)
{
      int i;
      int a,b,c;
      printf("分别输入矩阵的行数和列数以及非零元素的个数:\n");
      scanf("%d %d %d",&a,&b,&c);
      M->mu=a;
      M->nu=b;
      M->tu=c;
      printf("输入矩阵中的三元组:\n");

      for(i=1;i<=M->tu;i++)
      {
        scanf("%d",&M->data[i].i);
        scanf("%d",&M->data[i].j);
        scanf("%d",&M->data[i].e);
      }         
      return M;
}
TSMatrix * fasttrans(TSMatrix * M,TSMatrix * T)
{
    int col;
    int t,p,q;
    int num[100];
    int cpot[100];
    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;
        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];
        }
    }
    return T;
}
    void main()
   {
          TSMatrix *M,*T;
          int m;
          M=(TSMatrix *)malloc(sizeof(TSMatrix));
          T=(TSMatrix *)malloc(sizeof(TSMatrix));
           M=create(M);
          printf("原来的三元组为: \n");
          for(m=1;m<=M->tu;m++)
          {
              printf("%d ",M->data[m].i);
              printf("%d ",M->data[m].j);
              printf("%d\n ",M->data[m].e);
          }      
              T=fasttrans(M,T);
              printf("转置后的三元组为:\n");
          for(m=1;m<=T->tu;m++)
            {
              printf("%d\n ",T->data[m].i);
              printf("%d\n",T->data[m].j);
              printf("%d\n ",T->data[m].e);
            }      
     }
搜索更多相关主题的帖子: 最大值 三元 元素 
2011-06-07 05:45
快速回复:请问,这个矩阵转换的程序错在哪儿,怎么改。谢谢!!!
数据加载中...
 
   



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

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