您的位置:首页 > 其它

//稀疏矩阵 三元组算法

2010-10-10 22:51 218 查看
////////////////////////////////////////////
//稀疏矩阵的算法 模式匹配 				  //
//三元组算法							  //
//Author:Wang Yong				  		  //
//Date:	2010.8.19				  		  //
////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>

#define MAX 1000			//矩阵中非0元素的个数
typedef int ElemType;

////////////////////////////////////////////

//定义三元组

typedef struct
{
int row,col;			//非零元素的行号列号
ElemType e;				//非零元素的值
}Triple;

//定义三元组表

typedef struct
{
Triple data[MAX+1];		//三元组的表,data[0]未用
int m,n,num;			//矩阵的行数,列数和非零元素个数
}TSMatrix;

////////////////////////////////////////////////

//三元组表的创建

void CreatTSMatrix(	TSMatrix &M)
{
printf("请输入稀疏矩阵的行数:");
scanf("%d",&M.m);
printf("请输入稀疏矩阵的列数:");
scanf("%d",&M.n);
printf("请输入矩阵中非零元素的个数:");
scanf("%d",&M.num);

int i;
for(i = 1; i <= M.num; i++)
{
printf("请输入第%d个元素的行号和列号及其元素的值:",i);
scanf("%d %d %d",&M.data[i].row,&M.data[i].col,&M.data[i].e);
}
}
//////////////////////////////////////////////

//三元组的快速转置

TSMatrix FastTransMatrix(TSMatrix A,TSMatrix &B)
{
int number[MAX];
int position[MAX];
int i,j,temp;
B.m = A.n;
B.n = A.m;
B.num = A.num;
if(A.num)
{
for(j = 0; j < A.n;j++)			//矩阵A每一列非零元素的个数初始化
number[j] = 0;

for(i = 1 ; i <= A.num;i++)		//求矩阵中的每一列的非零元素个数
number[A.data[i].col]++;

position[0] = 1;				//position[i]为第i列第一个元素在B.data中的位置
for(j = 1 ; j < A.n; j++)		//求A.data的第j列第一个非零元素在B.data中的序号
position[j] = position[j-1] + number[j-1];
//求转置矩阵B的三元组表
for(i = 1 ; i <= A.num;i++)
{
j = A.data[i].col;
temp = position[j];
B.data[temp].row = A.data[i].col;
B.data[temp].col = A.data[i].row;
B.data[temp].e = A.data[i].e;

position[j]++;//第j列上后续元素的位置
}
}
return B;
}

//输出稀疏矩阵

void Output(TSMatrix M)
{
int i,j;
int cnt = 1;
int e = 0;
for(i = 0; i < M.m;i++)
{
for(j = 0; j < M.n;j++)
{
if(i == M.data[cnt].row && j == M.data[cnt].col)
{
printf("%5d",M.data[cnt].e);
++cnt;
}
else
printf("%5d",e);
}
printf("\n");
}
}
///////////////////////////////////////////

// 输出三元组表

void Print(TSMatrix M)
{
int i;
printf("{");
for(i = 1; i <= M.num;i++)
{
printf("( %d, %d, %d) ",M.data[i].row,M.data[i].col,M.data[i].e);
}
printf("}");
}

//////////////////////////////////////////////////
int main()
{
TSMatrix M,N;
CreatTSMatrix(M);
Output(M);
Print(M);
printf("\n");
FastTransMatrix(M,N);
Output(N);
Print(N);
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐