求矩阵马鞍点 (Get matrix's saddle point)
问题描述:求一个n*m阶矩阵的马鞍点
马鞍点定义:在一个矩阵中,若一个元素为该行最小值,该列最大值,则称该元素为这个矩阵的一个马鞍点
如:0 1 2 1 0 则马鞍点为a[1][0]和a[1][4]
1 2 3 2 1
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #define row 5 #define col 5 using namespace std; int rmin[row], cmax[col]; void Matrix(int a[row][col]) //求row*col阶矩阵中的马鞍点 { int i, j; bool have = false; for (i = 0; i < row; i++) //求每行最小值 { rmin[i] = a[i][0]; for (j = 1; j < col; j++) if (a[i][j] < rmin[i]) rmin[i] = a[i][j]; } for (j = 0; j < col; j++) //求每列最大值 { cmax[j] = a[0][j]; for (i = 1; i < row; i++) if (cmax[j] < a[i][j]) cmax[j] = a[i][j]; } for (i = 0; i<row; i++) //查询是否存在马鞍点 for (j = 0; j<col; j++) if (rmin[i] == cmax[j])/// { printf("a[%d][%d]=%d\n", i, j, a[i][j]); have = true; } if (!have) printf("没有马鞍点\n"); } int main() { int a[row][col]; int i, j; printf("请输入%d*%d阶矩阵:\n", row, col); for (i = 0; i < row; i++) for (j = 0; j < col; j++) scanf_s("%d", &a[i][j]); printf("矩阵中的马鞍点为:\n"); Matrix(a); system("pause"); }编译环境:Visual Studio 2015