在一个二维数组中找出所在行所在列都最小或最大的元素:
#include<iostream>
using namespace std;
#define maxSize 99
void printmin(int A[][maxSize],int m,int n)
{
int i,j,k,min,minj;
int flag;
for(i=0;i<m;++i)
{
min=A[i][0];
minj=0;
for(j=1;j<n;++j)
if(A[i][j]<min)
{
min=A[i][j];
minj=j;
}
flag=1;
for(k=0;k<m;++k)
if(min>A[k][minj])
{
flag=0;
break;
}
if(flag)
cout<<min<<",["<<i<<", "<<minj<<"]"<<" ";
}
cout<<endl;
}
void printmax(int A[][maxSize],int m,int n)
{
int i,j,k,max,maxj;
int flag;
for(i=0;i<m;++i)
{
max=A[i][0];
maxj=0;
for(j=1;j<n;++j)
if(A[i][j]>max)
{
max=A[i][j];
maxj=j;
}
flag=1;
for(k=0;k<m;++k)
if(max<A[k][maxj])
{
flag=0;
break;
}
if(flag)
cout<<max<<",["<<i<<", "<<maxj<<"]"<<" ";
}
cout<<endl;
}
int main()
{
int a[maxSize][maxSize];
for(int i=0;i<5;++i)
{
for(int j=0;j<5;++j)
cin>>a[i][j];
}
printmin(a,5,5);
printmax(a,5,5);
}
给出稀疏矩阵,创建其三元组存储结构:
void create(int A[][maxSize],int m,int n,int B[][3])
{
int i,j,k=1;
for(i=0;i<m;++i)
for(j=0;j<n;++j)
if(A[i][j]!=0)
{
B[k][0]=A[i][j];
B[k][1]=i;
B[k][2]=j;
++k;
}
B[0][0]=k-1;
B[0][1]=m;
B[0][2]=n;
}
//确定元素x是否在矩阵中
int search(int B[][3],int x)
{
int i,t;
t=B[0][0];
i=1;
while(i<=t&&B[i][0]!=x)
++i;
if(i<=t)
return 1;
else
return 0;
}
将以三元组存储的稀疏矩阵,转置并存于矩阵B:
void transpose(int A[][3],int B[][3])
{
int p,q,col;
B[0][0]=A[0][0];
B[0][1]=A[0][2];
B[0][2]=A[0][1];
if(B[0][0]>0)
{
q=1;
//按列转置,即先在A中寻找列序号较小的元素
for(col=0;col<=B[0][1];++col)
for(p=1;p<=B[0][0];++p)
if(A[p][2]==col)
{
B[q][0]=A[p][0];
B[q][1]=A[p][2];
B[q][2]=A[p][1];
++q;
}
}
}