问题阐述:寻找二维数组的鞍点(即元素所在行值最大,所在列值又最小)
代码清单:
public class FindSaddlePoint {
public static void findSaddlePoint(int[][] array) {
boolean flag = true; // 标记变量
for (int i = 0; i < array.length; i++) {
int index = getMaxIndexInOneRow(array[i]); // 获得该行最大元素的下标(列号)
for (int j = 0; j < array[0].length; j++) {
if (i == j) {
continue;
} else if (array[i][index] > array[j][index]) {
flag = false;
break; // 没有鞍点
}
}
if (flag == true) {
// 不满足上面的条件就是鞍点了
System.out.println("找到一个鞍点[" + i + "," + index + "]"+ array[i][index]);
}
}
}
// 获得一行中最大元素的下标
public static int getMaxIndexInOneRow(int[] row) {
int index = 0;
int first = row[0];
for (int i = 1; i < row.length; i++) {
if (first < row[i]) {
index = i;
}
}
return index;
}
// 打印数组
public static void prtn(int[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
System.out.print(array[i][j] + "\t");
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] array = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
FindSaddlePoint.prtn(array);
FindSaddlePoint.findSaddlePoint(array);
}
}