zl程序教程

您现在的位置是:首页 >  其它

当前栏目

求方阵的鞍点(即在行最小列最大的那个点)

最大 最小 那个
2023-09-11 14:19:05 时间

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

   }

  }

 }
}