若矩阵Am*n中存在某个元素aij满足:aij是第i行中最小值,且是第j列中最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中所有的鞍点。
//找鞍点
//是第i行最小,且是第j列中最大
void find_Andian(int arr[][3], int r, int c) {
int i = 0;
int j = 0;
int k = 0;
for (i = 0;i < r;i++) {
int min = arr[i][0];
int index = 0;//标记行最小的位置
int flag = 1;//标记是否行最小,列也是最大
for (j = 0;j < c;j++) {//找到当前行最小的
if (min > arr[i][j]) {
min = arr[i][j];
index = j;
}
}
//判断行最小是否列最大
for (k = 0;k < r;k++) {
if (arr[k][index] > arr[i][index]) {
flag = 0;
}
}
if (flag == 1) {
printf("鞍点%d,下标为%d %d\n", min, i, index);
}
}
}
int main()
{
int i = 0;
int j = 0;
int c = 3;//col列
int r = 3;//row行
int arr[3][3];//这里默认测试行列为3行3列
//你如果需要其他测试大小,自己加scanf即可
printf("请输入数组数据:\n");
for (i = 0;i < r;i++) {
for (j = 0;j < c;j++) {
scanf("%d", &arr[i][j]);
}
}
find_Andian(arr, c, r);
return 0;
}