java实现,求二维数组的鞍点
2015-02-06 17:11
204 查看
该实例用于求出二维数组中的鞍点。
鞍点就是二维数组中的一个元素,同时满足在该列上的最大值,在该行上的最小值: 如
10 4 9
9 6 8
4 2 3
中,鞍点就是1行1列上的6
该实例在二维数组不存在鞍点的情况下,作出提示
鞍点就是二维数组中的一个元素,同时满足在该列上的最大值,在该行上的最小值: 如
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("该数组没有鞍点!"); } }
相关文章推荐
- java实现求二维数组的鞍点
- Java二维数组实现简单Map(梁健-原创)
- JAVA实现二维数组的转置
- 剑指offer--面试题3:二维数组的查找--Java实现
- 寻找一个二维数组鞍点的算法实现
- 剑指offer刷题之java实现的二维数组中的查找
- 第2章 Java编程基础——FAQ2.25 如何实现一维和二维数组的遍历?
- 剑指offer面试题3:二维数组中的查找 java实现
- java实现二维数组回形输出
- java实现二维数组回形输出
- Java多线程实现二维数组相乘
- JAVA实现二维数组的转置
- Java 实现二维数组按指定列经行排序
- java第四周 任务四 用二维数组表示矩阵,实现矩阵乘法
- JAVA实现二维数组的行列转换
- JAVA实现二维数组的转置
- JAVA--第3周实验--任务2--实现二维数组的一种加法运算(编程思想)
- Java 实现二维数组按指定列经行排序
- 任意定义一个二维数组,实现矩阵的转置——java
- Java 二维数组实现杨辉三角