12月30日 发表于 2014-3-9 14:40:33

C语言 稀疏矩阵装置算法 就帮忙

#include<stdio.h>
#include<stdlib.h>
#define SMAX 1024
typedef int datatype;
typedef struct
{
        int i,j;
        datatype v;
}SPNode;
typedef struct
{
        int mu,nu,tu;
        SPNode data;       
} SPMatrix;
void InitMatrix(SPMatrix *A)
{
        A->mu=0;
        A->nu=0;
        A->tu=0;
}
void TransMatrix(SPMatrix *A,SPMatrix *B)
{
        int p,q,col;
        B->mu=A->nu;
        B->nu=A->mu;
        B->tu=A->tu;
        if(B->tu>0)
        {
                q=0;
                for(col=0;col<=A->nu;col++)
                        for(p=0;p<=A->tu;p++)
                                if(A->data.j==col)
                                {
                                        B->data.i=A->data.j;
                                        B->data.j=A->data.i;
                                        B->data.v=A->data.v;
                                        q++;
                                }
        }
}
void disp(int M[],int size)
{
        int i,j;
        for(i=0;i<size;i++)
                {
                        for(j=0;j<6;j++)
                        printf("%4d",M);
                        printf("\n");
                }
}
void disp3(SPMatrix *A,int size)
{
        int i;
        printf("%4d%4d%4d\n",A->mu,A->nu,A->tu);
        for(i=0;i<size;i++)
                printf("%4d%4d%4d\n",A->data.i,A->data.j,A->data.v);
}
void InputMatrix(SPMatrix *A,int M[],int m,int n,int size)
{
        int i,j,k=0;
        A->mu=m;
        A->nu=n;
        for(i=0;i<size;i++)
                {
                        for(j=0;j<6;j++)
                        {
                                if(M!=0)
                                {
                                        A->data.i=i;
                                        A->data.j=j;
                                        A->data.v=M;
                                        k++;
                                }
                        }
                }
        A->tu=k;
}
int main()
{
        SPMatrix *SA,*SB;
        int Matrix={{3},{0,6,0,0,1,7},{0,0,2},{0},{0,0,0,0,50},{0,0,0,0,0,9}};
        disp(Matrix,6);
        SA=(SPMatrix*)malloc(sizeof(SPMatrix));
        SB=(SPMatrix*)malloc(sizeof(SPMatrix));
        InitMatrix(SA);
        InitMatrix(SB);
        InputMatrix(SA,Matrix,6,6,6);
        printf("稀疏矩阵三元组:\n");
        disp3(SA,7);
        TransMatrix(SA,SB);
        printf("稀疏矩阵转置后:\n");
        disp3(SB,7);
}
这个是错误的 帮忙看看怎么改{void TransMatrix(SPMatrix *A,SPMatrix *B)   }

12月30日 发表于 2014-3-9 15:42:40

本帖最后由 12月30日 于 2014-3-9 15:44 编辑

#include<stdio.h>
#include<stdlib.h>
#define SMAX 1024
typedef int datatype;
typedef struct
{
      int i,j;
      datatype v;
}SPNode;
typedef struct
{
      int mu,nu,tu;
      SPNode data;      
} SPMatrix;
void InitMatrix(SPMatrix *A)
{
      A->mu=0;
      A->nu=0;
      A->tu=0;
}
SPMatrix *TransMatrix(SPMatrix *A)
{
      SPMatrix *B;
      int i,j,k;
      int num,cpot;
      B=(SPMatrix*)malloc(sizeof(SPMatrix));
      B->mu=A->nu;
      B->nu=A->mu;
      B->tu=A->tu;
      if(B->tu>0)
      {
                for(i=1;i<=A->tu;i++)
                        num=0;
                for(i=1;i<=A->tu;i++)
                        {
                              j=A->data.j;
                              num++;
                        }
                cpot=1;
                for(i=2;i<=A->nu;i++)
                cpot=cpot+num;
                for(i=1;i<=A->tu;i++)
                {
                        j=A->data.j;
                        k=cpot;
                        B->data.i=A->data.j;
                        B->data.j=A->data.i;
                        B->data.v=A->data.v;
                        cpot++;
                }
      }
      return B;
}
void disp(int M[],int size)
{
      int i,j;
      for(i=0;i<size;i++)
                {
                        for(j=0;j<6;j++)
                        printf("%4d",M);
                        printf("\n");
                }
}
void disp3(SPMatrix *A,int size)
{
      int i;
      printf("%4d%4d%4d\n",A->mu,A->nu,A->tu);
      for(i=0;i<size;i++)
                printf("%4d%4d%4d\n",A->data.i,A->data.j,A->data.v);
}
void InputMatrix(SPMatrix *A,int M[],int m,int n,int size)
{
      int i,j,k=0;
      A->mu=m;
      A->nu=n;
      for(i=0;i<size;i++)
                {
                        for(j=0;j<6;j++)
                        {
                              if(M!=0)
                              {
                                        A->data.i=i;
                                        A->data.j=j;
                                        A->data.v=M;
                                        k++;
                              }
                        }
                }
      A->tu=k;
}
int main()
{
      SPMatrix *SA,*SB;
      int Matrix={{3},{0,6,0,0,1,7},{0,0,2},{0},{0,0,0,0,50},{0,0,0,0,0,9}};
      disp(Matrix,6);
      SA=(SPMatrix*)malloc(sizeof(SPMatrix));
      SB=(SPMatrix*)malloc(sizeof(SPMatrix));
      InitMatrix(SA);
      InitMatrix(SB);
      InputMatrix(SA,Matrix,6,6,6);
      printf("稀疏矩阵三元组:\n");
      disp3(SA,7);
      SB=TransMatrix(SA);
      printf("稀疏矩阵转置后:\n");
      disp3(SB,7);
}

      


还是出错求解

12月30日 发表于 2014-3-9 15:43:50

本帖最后由 12月30日 于 2014-3-9 15:45 编辑

于禹尔 发表于 2014-4-27 21:51:42

不错不错长见识了

于禹尔 发表于 2014-4-27 21:53:39

不错不错长见识了

sidfate 发表于 2014-4-28 15:20:59

12月30日 发表于 2014-3-9 15:43 static/image/common/back.gif


你能说下程序的目的(或者操作)是什么吗?
页: [1]
查看完整版本: C语言 稀疏矩阵装置算法 就帮忙