/*
求一个矩阵的鞍点,即在行上最小在列上最大的点
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int readmtr(int a[][10],int n)
{
int i,j;
printf("input n*n matric:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]); //a[i][j]=rand()%10000;
return 1;
}
void printmtr(int a[][10],int n)
{
int i,j;
srand((int)time(0));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
}
main()
{
int a[10][10],n=3,i,j,k,minj,t,kz=0;
readmtr(a,n);
printmtr(a,n);
for(i=0;i<n;i++)
{
t=a[i][0];
minj=0;
for(j=1;j<n;j++)
if(a[i][j]<t)
{t=a[i][j]; minj=j;}
for(k=0;k<n;k++)
{
if(a[k][minj]>t) /* B:列中不存在比该点大的数不满足k<n跳出for(即 k==n) */
break; /* A:如果列中存在比该点大的数执行break,跳出for,此时 k<n ; */
if(k<n-1)
continue; /* 当判断到 最后一列时仍没有比该数大的 即 k==n-1 此时 if为假。跳过continue */
printf("zhe result is a[%d][%d] = %d\n",i,minj,a[i][minj]);
kz=1;
break;
}
}
if(kz==0) printf("No solution\n");
}