求马鞍点问题
♥求马鞍点问题。
如果矩阵a中存在一个元素a[i][j]满足这样的条件:
a[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。设计一个程序计算出 m * n 的矩阵a的所有马鞍点。
public class HousePoint {
public static void MinMax(int[][] a)
{
int m = a.length; //行数
int n = a[0].length; //列数
int[] min = new int[m];
int[] max = new int[n];
for (int i = 0; i < m; i++) //计算每行的最小元素,放入min[i]中
{
min[i] = a[i][0];
for (int j = 1; j < n; j++)
{
if (a[i][j] < min[i])
min[i] = a[i][j];
}
}
for (int j = 0; j < n; j++) //计算每列的最大元素,放入max[i]中
{
max[j] = a[0][j];
for (int i = 1; i < m; i++)
{
if (a[i][j] > max[j])
max[j] = a[i][j];
}
}
for (int i = 0; i < m; i++) //判定是否为马鞍点
for (int j = 0; j < n; j++)
if (min[i] == max[j]) //找到并显示马鞍点
System.out.printf("(%d,%d):%d\n",i,j,a[i][j]);
}
public static void disp(int[][] a)
{
for (int i = 0; i < a.length; i++)
{
for (int j = 0; j < a[i].length; j++)
{
System.out.printf("%4d",a[i][j]);
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] a = {{9,10,2,4},{15,11,7,8},{4,5,3,6}};
System.out.println(" a:");
disp(a);
System.out.println("所有马鞍点:");
MinMax(a);
}
}
运行结果:

作者:cszcoder
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号