| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 556 人关注过本帖
标题:请问,这个矩阵转换的程序错在哪儿,怎么改。谢谢!!!
只看楼主 加入收藏
宇宙614
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-3
结帖率:100%
收藏
 问题点数:0 回复次数:2 
请问,这个矩阵转换的程序错在哪儿,怎么改。谢谢!!!
#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
ZaakDov
Rank: 2
等 级:论坛游民
帖 子:7
专家分:26
注 册:2011-6-10
收藏
得分:0 
其实我们大家可以重新帮你敲一个
2011-06-10 02:20
世界模型
Rank: 4
等 级:业余侠客
威 望:1
帖 子:240
专家分:226
注 册:2010-9-12
收藏
得分:0 
程序代码:
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int *p = NULL;
    int N;
    cout<<"1.手动输入矩阵"<<endl;
    cout<<"2.自动生成矩阵"<<endl;
    cin>>N;
    switch(N)
    {
    case 1:
        {
            cout<<"输入矩阵的阶数:"<<endl;
            cin>>N;
            p = (int *)malloc(sizeof(int)*(N*N));
            for(int i=0;i<N;i++)
                for(int j=0;j<N;j++)
                    cin>>p[i*N+j];
        }break;
    case 2:
        {
            cout<<"指定生成矩阵的阶数:"<<endl;
            cin>>N;
            p = (int *)malloc(sizeof(int)*(N*N));
            for(int i=0;i<N;i++)
                for(int j=0;j<N;j++)
                    p[i*N+j] = i*N+j+1;
        }break;
    default:break;
    }
    cout<<"您输入的矩阵如下"<<endl;
    for(int i=0;i<N*N;i++)
    {
        cout<<setw(5)<<p[i];
        if((i+1)%N==0)
            cout<<endl;
    }
    int temp;
    for(i=0;i<N;i++)
        for(int j=0;j<N;j++)
        {
            if(i>j)
            {
                temp = p[i*N+j];
                p[i*N+j] = p[j*N+i];
                p[j*N+i] = temp;
            }
        }
    cout<<"转置后的矩阵如下"<<endl;
    for(i=0;i<N*N;i++)
    {
        cout<<setw(5)<<p[i];
        if((i+1)%N==0)
            cout<<endl;
    }
    int *q = NULL;
    q = (int *)malloc(sizeof(int)*(N*N));
    int sum;
    for(i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            sum = 0;
            for(int k=0;k<N;k++)
                sum = sum + p[i*N+k]*p[k*N+j];
            q[i*N+j] = sum;
        }
    }
    cout<<"求平方后的矩阵如下:"<<endl;
    for(i=0;i<N*N;i++)
    {
        cout<<setw(5)<<q[i];
        if((i+1)%N == 0)
            cout<<endl;
    }
    return 0;
}
2011-06-10 22:58
快速回复:请问,这个矩阵转换的程序错在哪儿,怎么改。谢谢!!!
数据加载中...
 
   



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

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