寻找一个方形矩阵的鞍点(该位置上的元素在该行最大,在该列最小)
先找出矩阵每一行的最大值,在依次判断该行最大值是否为该列最小值。
#include<stdio.h>
int main()
{
int a[5][5];
int b[5];
int i,j,t;
int flag = 0;//用于标示数组b中是否存在不是-1的元素
printf("输入一个5*5二维数组:\n");
for(i=0;i<5;i++){
scanf("%d %d %d %d %d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
}
//找出每一行中最大的元素,并把列号存在数组b中
for(i=0;i<5;i++) {
//默认每一行第一个元素为最大值
b[i] = a[i][0];
//引入一个循环变量t用来记录最大值的列号
t = 0;
//把最大值的数值暂时存在b中,把最大值的列号暂时存在t中
for(j=0;j<5;j++){
if(b[i]<a[i][j]){
b[i] = a[i][j];
t = j;
}
}
//如果一行中有两个相同的最大值,t等于-1
for(j=0;j<5;j++){
if(b[i]==a[i][j]&&j!=t){
t = -1;
}
}
//把最大值的列号存在b中
b[i] = t;
}
for(i=0;i<5;i++){
if(b[i]!=-1){
for(j=0;j<5;j++){
if(a[i][b[i]]>a[j][b[i]]) {
b[i] = -1;
}
else if(a[i][b[i]]==a[j][b[i]]&&i!=j){
b[i] = -1;
}
}
}
}
for(i=0;i<5;i++){
if(b[i]!=-1){
flag = 1;
printf("鞍点为:a[%d][%d]\n",i,b[i]);
}
}
if(flag==0){
printf("没有鞍点");
}
}