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+ "列");
}
}
}
}
}