稀疏矩阵--三元组表来压缩存储及转置怎么写,我不会呀?
注意:
使用c#来进行编写

解决方案 »

  1.   

    #include<stdio.h>  
         
    #define MAXSIZE 100//假设非零元的最大个数为100
    typedef struct _Triple{
    int i,j;//该非零元的行下标和列下标
    int e;
    }Triple;typedef struct{
    Triple data[MAXSIZE +1] ;//非零元的三元组表,data[0]未用
    int mu,nu,tu;//矩阵的行数,列数,非零元的个数
    }TSMatrix;int creatSMatrix(TSMatrix *M){//创建稀疏矩阵
    int m,n,v,p;
    printf("请输入行数、列数、非零元个数:\n");
    scanf("%d,%d,%d",&M->mu,&M->nu,&M->tu);
    p=1; 
    while(p<=M->tu){
     
    printf("请输入行数、列数、非零元值:\n");
    scanf("%5d,%5d,%5d",&m,&n,&v);
    M->data[p].i=m;
    M->data[p].j=n;
    M->data[p].e=v;
    p++;
    }
    return 0;
    }void printSMatrix(TSMatrix M){//打印稀疏矩阵
    int p,q,t=1;//p是行数, q是列数
    for(p=1;p<=M.mu;p++)
    {
    for(q=1;q<=M.nu;q++)
    {
    if(M.data[t].i==p&&M.data[t].j==q)
    {printf("%5d",M.data[t].e);
           t++;
    }
         else
        printf("%5d",0);
    }
            printf("\n");//打印完一行后记得转到下一行
    }
    } void Transpose(TSMatrix M,TSMatrix * T){
    //采用三元组表存储表示,求稀疏矩阵M的转置矩阵T
    int p,q,col;
    T->mu=M.nu; T->nu=M.mu; T->tu=M.tu;
    if(T->tu){
    q=1;
    for(col=1;col<=M.nu;++col)
    for(p=1;p<=M.tu;++p)
    if(M.data[p].j==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;
    q++; }
    }
    }
    void main(){
      TSMatrix M;
      TSMatrix T;
     // M=(TSMatrix *)malloc(sizeof(TSMatrix));
    //T=(TSMatrix *)malloc(sizeof(TSMatrix));
    creatSMatrix(&M);
    printSMatrix(M);
    printf("转置后矩阵为:\n");
    Transpose(M,&T);
    printSMatrix(T);}
    我最近刚写的。。希望对你有帮助
      

  2.   

    对着楼上的C++,改称C#吧,或者直接建个C++动态链接库,贴上楼上的的代码,写个外部方法,在C#中引用外部方法。。