展开全部
/*
程序的功能:
求任意的一个m×32313133353236313431303231363533e59b9ee7ad9431333337626239n矩阵的鞍点——鞍点是指该位置上的元素在该行上为最大、在该列上为最小,
矩阵中可能没有鞍点,但最多只有一个鞍点。
m、n(2<=m<=20、2<=n<=20)及矩阵元素从键盘输入(只考虑int型和每行、每列中没有并列最大/最小的情况)。
*/
public static void main(String[] args) {
int[][] arr = new int[20][20];
int m, n;
int max, min;
int maxHPos, maxLPos, minHPos, minLPos;
int flag = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入m的值:");
m = sc.nextInt();
System.out.println("请输入n的值:");
n = sc.nextInt();
/* 从键盘输入m×n矩阵,并存放到数组arr中 */
System.out.println("请输入矩阵的值:");
for (int i = 0; i
for (int j = 0; j
arr[i][j] = sc.nextInt();
}
}
/* 在矩阵中找鞍点 */
for (int i = 0; i
/* 找第i行的最大值及最大值的下标(包括行标和列标),i的值从0开始 */
max = arr[i][0];
maxHPos = i;
maxLPos = 0;
for (int j = 1; j
if (arr[i][j] > max) {
max = arr[i][j];
maxHPos = i;
maxLPos = j;
}
}
/* 在第i行的最大值所在列找该列的最小值及其下标 */
min = arr[0][maxLPos];
minHPos = 0;
minLPos = maxLPos;
for (int k = 1; k
if (arr[k][maxLPos]
min = arr[k][maxLPos];
minHPos = k;
minLPos = maxLPos;
}
}
/* 判断第i行的最大值是否是第i行最大值所在列的最小值,如果是,找到鞍点*/
if ((maxHPos == minHPos) && (maxLPos == minLPos)) {
System.out.println(String.format("有鞍点:arr[%d][%d]=%d", maxHPos,
maxLPos, arr[maxHPos][maxLPos]));
flag = 1; //给变量flag赋值1,表示鞍点已找到
break; //鞍点已找到,结束查找过程
}
}
if (0 == flag) //flag的值为0,表示在矩阵中没有找到鞍点
{
System.out.println("没有鞍点");
}
}