數組、矩陣、與廣義表(二)

  在一個二維數組中找出所在行所在列都最小或最大的元素:

#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;
				}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章