用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c++代码库

稀疏矩阵运算(稀疏矩阵初始化、稀疏矩阵的输入、稀疏矩阵的输出、稀疏矩阵的转置等)

2012-09-23 作者: 神马举报

[c++]代码库

#include<iostream.h>
const int smax=50;
typedef int elemtype;
struct triple
{
    int i,j;
    elemtype v;
};
struct smatrix
{
    int m,n,t;
    triple sm[smax+1];
};
void initmatrix ( smatrix &M )
{
    M.m=M.n=0;
    M.t=0;
}
 
void inputmatrix ( smatrix &M,int m, int n )
{
    M.m=m;
    M.n=n;
    int row,col;
    elemtype val;
    int k=0;
    cin>>row>>col>>val;
    while ( row!=0 )
    {
        k++;
        M.sm[k].i=row;
        M.sm[k].j=col;
        M.sm[k].v=val;
        cin>>row>>col>>val;
    }
    M.t=k;
}
void outputmatrix ( smatrix &M )
{
    cout<<'(';
    for ( int i=1; i<M.t; i++ )
    {
        cout<<'('<<M.sm[i].i<<',';
        cout<<M.sm[i].j<<',';
        cout<<M.sm[i].v<<')'<<',';
    }
    if ( M.t!=0 )
    {
        cout<<'('<<M.sm[M.t].i<<',';
        cout<<M.sm[M.t].j<<',';
        cout<<M.sm[M.t].v<<')';
    }
    cout<<')'<<endl;
}
 
smatrix transpose ( smatrix &M )
{
    smatrix s;
    initmatrix ( s );
    int m,n,t;
    m=M.m;
    n=M.n;
    t=M.t;
    s.m=n;
    s.n=m;
    s.t=t;
    if ( t==0 )
        return s;
    int num[smax+1];
    int cpot[smax+1];
    for ( int col=1; col<=n; col++ )
        num[col]=0;
    for ( int k=1; k<=t; k++ )
        ++num[M.sm[k].j];
    cpot[1]=1;
    for ( col=2; col<=n; col++ )
        cpot[col]=cpot[col-1]+num[col-1];
    for ( int p=1; p<=t; p++ )
    {
        col=M.sm[p].j;
        int q=cpot[col];
        s.sm[q].i=M.sm[p].j;
        s.sm[q].j=M.sm[p].i;
        s.sm[q].v=M.sm[p].v;
        ++cpot[col];
    }
    return s;
}
 
void main()
{
    smatrix M;
    int m,n;
    initmatrix ( M );
    cout<<"input M,N:"<<endl;
    cin>>m>>n;
    inputmatrix ( M,m,n );
    cout<<"m="<<M.m<<',';
    cout<<"n="<<M.n<<',';
    cout<<"t="<<M.t<<endl;
    outputmatrix ( M );
    cout<<"m="<<M.m<<',';
    cout<<"n="<<M.n<<',';
    cout<<"t="<<M.t<<endl;
    outputmatrix ( transpose ( M ) );
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...