package suanfa;
import java.util.Scanner;
/** * 求矩阵的鞍点,所谓鞍点就是行上最小而列上最大的点 * * @author dell * */ public class AnDian { /** * 循环输入方阵的值 * @param n方阵的每一行的长度 * @return一个方阵 */ public static double[][] input(int n) { double arc[][] = new double[n][n]; System.out.println("请输入n*n矩阵的各个值"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Scanner s = new Scanner(System.in); System.out.print("d"); double arcValue = s.nextDouble(); arc[i][j] = arcValue; } }
return arc; }
/** * 输出方阵的值 * @param arc */ public static void print(double arc[][]) { for (int i = 0; i < arc.length; i++) { for (int j = 0; j < arc.length; j++) { System.out.print(arc[i][j] + " "); } System.out.println(); } }
public static void main(String args[]) { double arc[][] = input(3);
print(arc);
getAn(arc); }
/** * 寻找并打印出鞍点 * @param arc */ public static void getAn(double arc[][]) {
double min; for (int i = 0; i < arc.length; i++) { min = arc[i][0];// 令第i行的最小值是该行的第一个元素 int minIndex = 0;// 记录第i行的最小元素的位置 // 找到第i行的最小元素,并记录其所在的列 for (int j = 1; j < arc.length; j++) {
if (min > arc[i][j]) { min = arc[i][j]; minIndex = j;
} }
// 遍历第i行最小值的那一列 for (int k = 0; k < arc.length; k++) { if (min < arc[k][minIndex]) { // 如果不是该列的最大值,说明没有鞍点 System.out.println("第" + i+"行" + "第" + minIndex+ "列" + "没有鞍点"); break; } else if (k ==arc.length- 1) {//说明min是鞍点打印即可 System.out.println("鞍点为 " +min + "位置是" +"第" + i+"行" + "第" + minIndex+ "列"); }
}
}
} }