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("该数组没有鞍点!");
		}
}

  

转载于:https://www.cnblogs.com/luckid/p/4277639.html

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值