解决矩阵中一行含有多个相同最大值的鞍点查找法
2017-09-12 20:13
465 查看
package classPack; import bascPack.ArrayTest; import java.util.*; /** * Created by cloud on 2017/7/9. */ public class TwoDimensionTest { public static void main(String[] args) { // int row = 3, column = 3; //这里注释的部分是自己也可以自定义一个二维数组初始化的入口 // int[][] arr = new int[row][column]; // init(arr); int[][] arr={{5,6,6,6},{10,10,7,9},{11,9,8,8},{15,8,6,7},{4,6,5,6}}; ArrayTest.myprint2(arr); searchSaddlePiont(arr); } private static void searchSaddlePiont(int[][] arr) { for (int m = 0; m <arr.length ; m++) { Map<Integer, Integer> map = rowSearch(arr,m); Set<Map.Entry<Integer,Integer>> entrySet=map.entrySet(); Iterator<Map.Entry<Integer, Integer>> it = entrySet.iterator(); while (it.hasNext()) { Map.Entry<Integer, Integer> me = it.next(); Integer j = me.getKey(); Integer i = me.getValue(); columnSerach(i, j, arr); } } } public static Map<Integer, Integer> rowSearch(int[][] arr, int i) { Map<Integer, Integer> map = new HashMap<Integer, Integer>(); int max = arr[i][0]; for (int j = 0; j < arr[i].length; j++) { if (arr[i][j] > max) max = arr[i][j]; } for (int j = 0; j <arr[i].length ; j++) { if (arr[i][j] == max) map.put(j, i); } System.out.println("行最大值坐标(行在后面):"+map); return map; } private static void init(int[][] arr) { Random random = new Random(); for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { arr[i][j] = random.nextInt(10); } } } public static void columnSerach(int i, int j,int[][] arr) { int min = arr[i][j]; int flag=1; for (int k = 0; k <arr.length ; k++) { if(arr[k][j]<min){ System.out.println("第"+(i+1)+"行没有鞍点"); flag = 0; break; } } if (flag == 1) { System.out.println("第"+(i+1)+"行存在鞍点arr["+i+"]"+"["+j+"]="+arr[i][j]); } } }
结果如下图:
下面换一个5*4矩阵进行测试,这里换矩阵只要在源程序中更改数组初始化的数值即可,在程序中将二维数组初始化为下面这样:int[][] arr={{5,6,6,6},{10,10,7,9},{11,9,8,8},{15,8,6,7},{4,6,5,6}}; 结果如下:
若是要测试别的矩阵是否有鞍点,只要自定义初始化的矩阵值即可,有问题的可以和我一起交流,欢迎。
相关文章推荐
- /*输入一个5*5的矩阵,输出所有的鞍点。所谓鞍点是指某一行中的最大值也是该列中的最小值。*/
- HDU 4328 Cut the cake 最大相同子矩阵, 悬线法
- 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
- 经典面试题:求数组的最大子序列和;实现函数 :判断一个自负喜欢是否是另一个字符串旋转所得;杨氏矩阵中查找一个数。
- 程序员面试金典: 9.11 排序与查找 11.6给定M*N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。
- hdu 4975 最大流解决行列和求矩阵问题,用到矩阵dp优化
- 解决静态查找相同串或者有相同前缀的所有串的好方法
- hdu 4975 最大流解决行列和求矩阵问题,用到矩阵dp优化
- 0 1 矩阵查找最大正方形
- java查找最大相同子串
- 查找在一个字符串中含有多少个相同的子字符串
- 动态规划解决矩阵左上角到右下角距离最大
- 一个求矩阵鞍点(即行上最小的数 同时是列上最大的数)的C程序
- 查找两个字符串的最大相同子串
- 用递归实现查找字符串中相同字符连续出现次数的最大值
- nz-input-number最大值和最小值相同后控件死掉的解决
- 查找两个字符传中最大的相同字符串
- 一行代码实现数组中最大值与最小值的查找