您的位置:首页 > 编程语言 > Java开发

java实现,求二维数组的鞍点

2015-02-06 17:11 204 查看
该实例用于求出二维数组中的鞍点。

鞍点就是二维数组中的一个元素,同时满足在该列上的最大值,在该行上的最小值: 如
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]
;
int mina [][]=new int [m]
;
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]
;
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("该数组没有鞍点!");
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: