@题目
制作给定m*n矩阵A的三元组,要求以两种形式表示三元组。并且利用三元组判断给定元素x是否存在于矩阵中
三元组表示方法1
//三元组第一种表示形式
//制作数组A的三元组B[][3]
void createtrimat_1(int A[][maxSize],int m, int n, int B[][3])//A为m行n列
{
int k=0;//记录非零元素个数
for(int i=0;i<m;++i) //遍历原矩阵A
{
for(int j=0;j<n;++j)
{
if(A[i][j]!=0)
{
++k;//第一行不储存元素
B[k][0]=A[i][j];
B[k][1]=i;
B[k][2]=j;
}
}
}
B[0][0]=k;
B[0][1]=m;
B[0][2]=n;
}
三元组表示方法2
//三元组第二种形式
//制作数组A的结构体三元组B
typedef struct Trimat{
int val;
int row,column;
}Trimat;
void createtrimat_2(int A[][maxSize],int m, int n, Trimat *B)
{
int k=0;//记录原矩阵中非零元素个数
for(int i=0;i<m;++i)//遍历原矩阵
{
for(int j=0;j<n;++j)
{
if(A[i][j]!=0)
{
++k;
B[k].val=A[i][j];
B[k].row=i;
B[k].column=j;
}
}
}
B[0].val=k;
B[0].row=m;
B[0].column=n;
}
通过三元组判断给定元素x是否存在于矩阵
//通过三元组,判断元素x是否存在于矩阵中
//若存在,返回true;若不存在,返回false
bool isExist(int B[][3],int x)
{
for(int i=1;i<=B[0][0];++i)
{
if(B[i][0]==x)
{
return true;
}
}
return false;
}
完整测试源码
#include<iostream>
#define maxSize 5 //由于是测试程序,需要提前预定好原矩阵的列数
using namespace std;
//三元组第一种表示形式
//制作数组A的三元组B[][3]
void createtrimat_1(int A[][maxSize],int m, int n, int B[][3])//A为m行n列
{
int k=0;//记录非零元素个数
for(int i=0;i<m;++i) //遍历原矩阵A
{
for(int j=0;j<n;++j)
{
if(A[i][j]!=0)
{
++k;//第一行不储存元素
B[k][0]=A[i][j];
B[k][1]=i;
B[k][2]=j;
}
}
}
B[0][0]=k;
B[0][1]=m;
B[0][2]=n;
}
//三元组第二种形式
//制作数组A的结构体三元组B
typedef struct Trimat{
int val;
int row,column;
}Trimat;
void createtrimat_2(int A[][maxSize],int m, int n, Trimat *B)
{
int k=0;//记录原矩阵中非零元素个数
for(int i=0;i<m;++i)//遍历原矩阵
{
for(int j=0;j<n;++j)
{
if(A[i][j]!=0)
{
++k;
B[k].val=A[i][j];
B[k].row=i;
B[k].column=j;
}
}
}
B[0].val=k;
B[0].row=m;
B[0].column=n;
}
//通过三元组,判断元素x是否存在于矩阵中
//若存在,返回true;若不存在,返回false
bool isExist(int B[][3],int x)
{
for(int i=1;i<=B[0][0];++i)
{
if(B[i][0]==x)
{
return true;
}
}
return false;
}
int main()
{
int A[][5]={{0,190,1,2,1},{1,0,0,2,1},{0,1,0,0,2}};
int B[100][3];//B的第一个参数用来预先设置存储非零元素的个数,因此取一个较大的数
createtrimat_1(A,3,5,B);
int x;//检测是否存在的数x
cout<<"Please input the number to test: ";
cin>>x;
if(isExist(B,x)==false)
{
cout<<x<<" dose not exist"<<endl;
}
else
{
cout<<x<<" exists"<<endl;
}
return 0;
}