该实例用于求出二维数组中的鞍点。
鞍点就是二维数组中的一个元素,同时满足在该列上的最大值,在该行上的最小值: 如
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("该数组没有鞍点!");
}
}