日期:2014-05-20  浏览次数:20791 次

二维数组鞍点问题
找出一个二维数组的鞍点,
即该位置上的元素的在该行上最
大,在列上最小。也可能没有鞍点。
  二维数组自己随便定义一个 行列都为4。

------解决方案--------------------
Java code
public static void main(String[] args) {
        int[][] arr = new int[4][4];
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                arr[i][j] = i + j;
            }
        }
        for (int i = 0; i < 4; i++) {
            int amax=arr[i][0];
            int column=0;
            for (int j = 1; j < 4; j++) {
                if(arr[i][j]>amax)
                {
                    amax=arr[i][j];
                    column=j;
                }    
            }
            int row=0;
            for(int k=1;k<4;k++)
            {
                int amin=arr[k][column];
                
                if(arr[k][column]<amin)
                {
                    amin=arr[k][column];
                    row=k;
                }
            }
            if(row==i)
            {
                System.out.println("行:"+row);
                System.out.println("列:"+column);
                System.out.println("值:"+amax);
            }
        }
        
    }

------解决方案--------------------
Java code
public class andian {

    public andian() {
    }
    
    
    public static void main(String[] args) {
        
        int max=0;
        boolean cunzai=false;
        int min=0;
        int hang=0;
        int lie=0;
        int an[][]=new int[4][4];
        System.out.println(" 随机产生的数组为:");
        for (int i=0;i<4;i++){//随机产生4×4数组
            for(int m=0;m<4;m++){
                an[i][m]=(int)(Math.random()*100+1);
                System.out.print(an[i][m]+" ");
                if(m==3){
                    System.out.println("");
                }
            }
        }
        //开始判断鞍点的位置
         for (int i=0;i<4;i++){
            for(int m=0;m<4;m++){//找出行中的最大值及位置
                if(an[i][m]>max){
                    max=an[i][m];
                    hang=i;
                    lie=m;
                    min=max;
                }
            }
            for(int e=0;e<4;e++){//判断找出的最大值是不是列中的最小值
                if(an[e][lie]<min){
                    cunzai=false;
                    break;
                }else{
                    cunzai=true;
                }
            }
            
         }
        if(cunzai){
                System.out.println("随机产生的数组存在鞍点: "+min);
                System.out.println("位于第"+(hang+1)+"行,第"+(lie+1)+"列。");
            }else{
                 System.out.println("随机产生的数组不存在鞍点!");
            }
    }
    
}