java实现,求二维数组的鞍点
该实例用于求出二维数组中的鞍点。
鞍点就是二维数组中的一个元素,同时满足在该列上的最大值,在该行上的最小值: 如
10 4 9
9 6 8
4 2 3
中,鞍点就是1行1列上的6
该实例在二维数组不存在鞍点的情况下,作出提示
package 数组; /** * @param args * @author 刘雁冰 * @date 2015-02-06 16:51 */ import java.util.ArrayList; import java.util.Scanner; /* * 该实例用于求出二维数组中的鞍点。 * * 鞍点就是二维数组中的一个元素,同时满足在该列上的最大值,在该行上的最小值 * 如 * 10 4 9 * 9 6 8 * 4 2 3 * 中,鞍点就是1行1列上的6 * * 该实例在二维数组不存在鞍点的情况下,作出提示 */ public class Saddlepoint { static int TwoDArray[][]; static int i,j,temp; //m行 n列 public ArrayList saddlePoint(int [][]a,int m,int n){ //存储可行结果的二维数组 int maxa[][]=new int [m][n]; int mina [][]=new int [m][n]; ArrayList<Integer>listA=new ArrayList<Integer>(); //遍历每一行,得出每一行的最小元素,并标记 for(i=0;i<a.length;i++){ temp=a[i][0]; for(j=0;j<a[i].length;j++){ if(a[i][j]<temp) temp=a[i][j]; } for(j=1;j<a[i].length;j++){ if(a[i][j]==temp) maxa[i][j]=1; } } //遍历每一列,求出每一列的最大元素,并标记 for(j=0;j<a[0].length;j++){ temp=a[0][j]; for(i=1;i<a.length;i++){ if(a[i][j]>temp) temp=a[i][j]; } for(i=1;i<a.length;i++){ if(a[i][j]==temp) mina[i][j]=1; } } //当满足以上两个条件时,用一个ArrayList存储该元素的行数,列数,数值,并返回该链表 for(i=0;i<a.length;i++){ for(j=0;j<a[i].length;j++){ int tar; if(maxa[i][j]+mina[i][j]==2) { tar=a[i][j]; listA.add(i); listA.add(j); listA.add(tar); return listA; } } } //当二维数组不存在鞍点时返回一个负数 listA.add(-1); return listA; } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("请输入二维数组的行数:"); Scanner sc=new Scanner(System.in); int m=sc.nextInt(); System.out.println("请输入二维数组的列数"); int n=sc.nextInt(); System.out.println("要构成的二维数组为"+m+"行,"+n+"列的一个二维数组"); int[][] TwoDArray=new int [m][n]; System.out.println("请输入数据组成二维数组"); for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ TwoDArray[i][j]=sc.nextInt(); } } System.out.println("您输入的二维数组为:"); for(int i=0;i<m;i++){//循环输出 for(int j=0;j<n;j++) System.out.print(TwoDArray[i][j]+"\t"); System.out.println(); } Saddlepoint sp=new Saddlepoint(); //若存在鞍点,则输出该鞍点的行数,列数,数值。 if(sp.saddlePoint(TwoDArray, m, n).size()>1) System.out.println("该数组有鞍点,在"+sp.saddlePoint(TwoDArray, m, n).get(0)+"行" +sp.saddlePoint(TwoDArray, m, n).get(1)+"列"+"鞍点值为:"+sp.saddlePoint(TwoDArray, m, n).get(2)); //否则给出提示 else System.out.println("该数组没有鞍点!"); } }