⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5_4.cpp

📁 C++的电子教程
💻 CPP
字号:
//程序实例5_4
//三元组的矩阵转换(方法二)
#include<stdio.h>
#define M 4
#define N 5
#define Max 10

//原稀疏矩阵转换成三元组
void TriArr(int a[][N],int b[][3])
{	int i,j,k=0;                 
	for(i=0;i<M;i++)
		for(j=0;j<N;j++)
			if(a[i][j]!=0)
			{	k++;                     //k表示非零元素个数
				b[k][0]=i;
				b[k][1]=j;
				b[k][2]=a[i][j];
			}
	b[0][0]=M;	b[0][1]=N;	b[0][2]=k;  //M行N列的稀疏矩阵中,共有k个非零元素
}

//三原组实现转置
void transp_2(int a[][3],int b[][3])
{	int m,n,t,i,j;
	int num[Max];	   // num[]存放转置矩阵b各行非零元素的个数 
	int pos[Max];	   // pos[]存放转置矩阵每行在b中的起始位置 

	m=a[0][0];	n=a[0][1];	t=a[0][2];
	b[0][0]=n;	b[0][1]=m;	b[0][2]=t;

	for(i=0;i<n;i++)
		num[i]=0;
	for(i=1;i<=t;i++)        	 // 统计转置矩阵各行非零元素的个数 	
		num[a[i][1]]++;	

	pos[0]=1;
	for(i=1;i<n;i++)	         // 计算每行元素在b中的起始位置 
		pos[i]=pos[i-1]+num[i-1];

	for(i=1;i<=t;i++)
		{	j=pos[a[i][1]];	     // 取a[i][1]行在b中的存储位置 
			b[j][0]=a[i][1];
			b[j][1]=a[i][0];
			b[j][2]=a[i][2];
			(pos[a[i][1]])++;    // 指向同一行中下一个元素的位置
		}
}


void main()
{	int a[][5]={0,3,0,0,0,
				0,0,0,0,0,
				1,4,0,0,0,
				0,0,0,0,7};
	int i,j,b[5][3],c[5][3];

	TriArr(a,b);
	printf("原稀疏矩阵为:\n");
	//输出原矩阵
	for(i=0;i<M;i++)
	{
		for(j=0;j<N;j++)
			printf("%3d",a[i][j]);
		printf("\n");
	}

	//输出压缩后的矩阵
	printf("压缩后的稀疏矩阵:\n");
	for(i=0;i<=b[0][2];i++)
	{	for(j=0;j<3;j++) 	printf("%3d",b[i][j]);
		printf("\n");
	}

    //输出原矩阵的转置矩阵
    printf("原矩阵的转置矩阵:\n");
	for(i=0;i<N;i++)
	{
		for(j=0;j<M;j++)
			printf("%3d",a[j][i]);
		printf("\n");
	}

	//transp_1(c,b);  //压缩矩阵的转置
	transp_2(b,c);

	//输出转置后的压缩矩阵
    printf("转置后的压缩矩阵:\n");
	for(i=0;i<=c[0][2];i++)
	{	for(j=0;j<3;j++)
			printf("%3d",c[i][j]);
		printf("\n");
	}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -