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

📄 顺序三元组.cpp

📁 矩阵的一些算法应用
💻 CPP
字号:
#include "iostream.h"
#define MAXSIZE 12500
typedef int ElemType;
typedef struct {
	int i,j;
	ElemType e;
}Triple;
typedef struct 
{
	Triple data[MAXSIZE];
	int m,n,t;
}SMtrix;
//三元组顺序表的初始化
void Minit(SMtrix &M)
{M.m=M.n=M.t=0;
}
//输出稀疏矩阵(二维形式)
void matrixprint(SMtrix M)
{

int i,j,k,flag=0;
for(i=1;i<=M.m;i++)
{    
	for(j=1;j<=M.n;j++)
{        for(k=1;k<=M.t;k++)
	 	 if(M.data[k].i==i&&M.data[k].j==j)
		 {cout<<M.data[k].e<<"  ";
		flag=1; break;}
		if(!flag) cout<<"0"<<"  ";
		 flag=0;
}
cout<<endl;      
}
}

//建立三元组存储
void createm(SMtrix &M)
{int k;
cout<<"enter 输入行数、列数和非零元素个数:";
cin>>M.m>>M.n>>M.t;
cout<<"请按行、列、非零元素值的顺序输入:"<<endl;
for(k=1;k<=M.t;k++)
cin>>M.data[k].i>>M.data[k].j>>M.data[k].e;
}
//求转置
void transmatrix(SMtrix a,SMtrix &b) 
   { 
     int p,q,col; 
     b.m=a.n; 
     b.n=a.m; 
     b.t=a.t; 
     if(b.t<=0) 
         cout<<"A=0"<<endl; 
      q=1; 
for(col=1;col<=a.n;col++) 
        for(p=1;p<=a.t;p++) 
         if(a.data[p].j==col){ 
             b.data[q].i=a.data[p].j; 
             b.data[q].j=a.data[p].i; 
             b.data[q].e=a.data[p].e; 
             q++; 
            } 
    } 
//快速转置
void fasttranstri(SMtrix &b,SMtrix a)
{ 
    int p,q,col,k; 
    int num[1000],cpot[1000]; 
    b.m=a.n; b.n=a.m; b.t=a.t; 
    if(b.t<=0) 
        cout<<"a=0"<<endl; 
	else
	{
    for(col=1;col<=a.n;++col) 
             num[col]=0; 
    for(k=1;k<=a.t;++k) 
            ++num[a.data[k].j]; 
  cpot[1]=1; 
   for(col=2;col<=a.t;++col) 
         cpot[col]=cpot[col-1]+num[col-1]; 
   for(p=1;p<=a.t;++p)
   { 
      col=a.data[p].j;  q=cpot[col]; 
      b.data[q].i=a.data[p].j;  b.data[q].j=a.data[p].i; 
       b.data[q].e=a.data[p].e;  ++cpot[col]; 
    } 
	}
} 


//输出稀疏矩阵的三元组表
void print(SMtrix M)
{
	cout<<"稀疏矩阵的三元组表"<<endl;
cout<<"稀疏矩阵共有"<<M.m<<"行,"<<M.n<<"列"<<endl;
cout<<"行"<<"  "<<"列"<<"  "<<"元素值"<<endl;
for(int i=1;i<=M.t;i++)
    cout<<M.data[i].i<<"  "<<M.data[i].j<<"  "<<M.data[i].e<<endl;
}

void main()
{
	SMtrix a,b;
	Minit(a);Minit(b);
	createm(a);
	matrixprint(a);
	cout<<endl;
	print(a);
//	transmatrix(a,b);
//	matrixprint(b);
//		print(b);
		fasttranstri(b,a);
	    matrixprint(b);
	//			print(b);
	//	cout<<endl;
	//	matrixprint(a);
}

⌨️ 快捷键说明

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