求n行n列整数矩阵的鞍点,即该位置上的元素是所在行上的最小值,也是所在列上的最大值。如果存在鞍点则输出其行号、列号,否则输出None。简单起见,假设元素均不相同。
#include<iostream>
#define N 3
using namespace std;
int main()
{
int g,f,k;
int max;
int g1,f1;
int A[N][N]={0};
int flag;
for(int i = 0;i<N;i++)
{
for(int j = 0;j <N;j++)
{
cin>>A[i][j];
}
}
for (g = 0;g < N;g++)
{
max = A[g][0];
f = 0;
for(f = 0;f < N;f++)
{
if (A[g][f]>max)
{
max = A[g][f];
f1 = f;
g1 = g;
}
}
flag = 1;
for(k = 0;k <N;k++)
{
if(max > A[k][f1])
{
flag = 0;
continue;
}
}
if(flag)
{
cout<<g1+1<<' '<<f1+1<<' '<<max<<endl;
break;
}
}
if(!flag)
{
cout<<-1<<endl;
}
return 0;
}
或
#include<stdio.h>
int main()
{
int a[6][6],n;
scanf("%d",&n);
int i,j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d",&a[i][j]);
}
}
int k=0,y=0,flag=1,p=0;
if(n==1)
printf("0,0");
else
{
for(i=0; i<n; i++)
{
y=i;
for(p=0; p<n; p++)
{
if(a[i][k]<=a[i][p])
{
k=p;
}
}
for(j=0; j<n; j++)
{
if(a[y][k]>a[j][k])
{
y=j;
break;
}
}
if(i==y)
{
flag=0;
break;
}
}
if(flag==0)
printf("%d,%d",i,k);
else
printf("None");
}
return 0;
}