用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

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

加载中,请稍后...