zoukankan      html  css  js  c++  java
  • 二维数组

    这是一张及其偶然的结果,因为我没有实现如果不连通的情况下选择最小a[i][j]使其联通

    所以这样,觉得万全之策应该是

    //二维数组  寻求最大联通子数组
    /*
    初步规划:
    1.寻求所有正数
    2.判断是否联通 否继续
    3.寻找子联通中最大和的作为基础
    4.在以下操作中有两次循环,基础图中的各个最外面的元素与各个不是子联通图的最大权值,比较最大,判断是否为非负数,继而是否加入基础图
         每一个不是基础的子联通正数元素(假设只有一个元素) 和基础最外面求最大权值,并比较各个外面的元素对应该子联通的最大,
         若最最大权值>0,若是则选则该路径和该子联通,否则舍弃,进行下一个子联通的而判断
    */
    利用数据结构寻找最大联通的方法

    下面的代码为已=以上图示有误

    package test4;
    
    import java.util.Random;
    
    //二维数组  寻求最大联通子数组
    /*
     初步规划:
     1.寻求所有正数
     2.判断是否联通 否继续
     3.寻找子联通中最大和的作为基础
     4.在以下操作中有两次循环,基础图中的各个最外面的元素与各个不是子联通图的最大权值,比较最大,判断是否为非负数,继而是否加入基础图 
         每一个不是基础的子联通正数元素(假设只有一个元素) 和基础最外面求最大权值,并比较各个外面的元素对应该子联通的最大,
         若最最大权值>0,若是则选则该路径和该子联通,否则舍弃,进行下一个子联通的而判断
     */
    public class Ew {
    
        public static void main(String[] args){
            int X=4,Y=5;
            int a[][]=new int[4][5];
            int b[][]=new int[4][5];
            Random r=new Random();
            
            for(int i=0;i<X;i++){
                for(int j=0;j<Y;j++){
                    a[i][j]=r.nextInt(20) - 10;//有正有负
                }
            }
            
            for(int i=0;i<X;i++){
                for(int j=0;j<Y;j++){
                    System.out.print(a[i][j]+" ");
                }
                System.out.println(" ");
            }
            System.out.println(" ");
            
            for(int i=0;i<X;i++){
                for(int j=0;j<Y;j++){
                    if(a[i][j]>=0){
                        b[i][j]=1;//选中
                    }
                    else{
                        b[i][j]=0;
                    }
                }
            }
            
            
            for(int i=0;i<X-2;i++){
                for(int j=0;j<Y-1;j++){//下右
                    if(b[i][j]!=1){
                        if((a[i][j]+a[i+1][j]>0)&&
                                ((a[i][j]+a[i+1][j]+a[i+2][j]>0)||((a[i][j]+a[i+1][j]+a[i+1][j+1]>0)))){
                            b[i][j]=1;
                        }
                    }
                }
            }
            
            //下 左
            for(int i=0;i<X-2;i++){
                for(int j=Y-1;j>1;j--){
                    if(b[i][j]!=0){
                        if((a[i][j]+a[i+1][j]>0)&&
                                (a[i][j])+a[i+1][j]+a[i+1][j-1]>0){
                            b[i][j]=1;
                        }
                    }
                }
            }
            //右下
            for(int j=0;j<Y-2;j++){
                for(int i=0;i<X-1;i++){
                    if(b[i][j]!=1){
                        if((a[i][j]+a[i][j+1]>0)&&
                                ((a[i][j]+a[i][j+1]+a[i][j+2]>0)||((a[i][j]+a[i][j+1]+a[i+1][j+1]>0)))){
                            b[i][j]=1;
                        }
                    }
                }
            }
                
            //右上
            for(int j=0;j<Y-2;j++){
                for(int i=X-1;i>1;i--){
                    if(b[i][j]!=1){
                        if((a[i][j]+a[i][j+1]>0)&&
                                ((a[i][j]+a[i][j+1]+a[i][j+2]>0)||((a[i][j]+a[i][j+1]+a[i-1][j+1]>0)))){
                            b[i][j]=1;
                        }
                    }
                }
            }
            
            for(int j=Y-1;j>1;j--){
                for(int i=X-1;i>0;i--){//左下
                    if(b[i][j]!=1){
                        if((a[i][j]+a[i][j-1]>0)&&
                                ((a[i][j]+a[i][j-1]+a[i][j-2]>0)||((a[i][j]+a[i][j-1]+a[i-1][j-1]>0)))){
                            b[i][j]=1;
                        }
                    }
                }
            }
        
            
            for(int j=Y-1;j>1;j--){
                for(int i=0;i<X-1;i++){//左上
                    if(b[i][j]!=1){
                        if((a[i][j]+a[i][j-1]>0)&&
                                ((a[i][j]+a[i][j-1]+a[i][j-2]>0)||((a[i][j]+a[i][j-1]+a[i+1][j-1]>0)))){
                            b[i][j]=1;
                        }
                    }
                }
            }
        
            for(int i=X-1;i>1;i--){
                for(int j=Y-1;j>0;j--){//上左
                    if(b[i][j]!=1){
                        if((a[i][j]+a[i-1][j]>0)&&
                                ((a[i][j]+a[i-1][j]+a[i-2][j]>0)||((a[i][j]+a[i-1][j]+a[i-1][j-1]>0)))){
                            b[i][j]=1;
                        }
                    }
                }
            }
        
            for(int i=X-1;i>1;i--){
                for(int j=0;j<Y-2;j++){//上右
                    if(b[i][j]!=1){
                        if((a[i][j]+a[i-1][j]>0)&&(a[i][j]+a[i-1][j]+a[i-1][j+1]>0))
                            b[i][j]=1;
                    }
                }
            }
            
            int sum=0;
            for(int i=0;i<X;i++){
                for(int j=0;j<Y;j++){
                    if(b[i][j]==1){
                        System.out.print(a[i][j]+" ");
                        sum+=a[i][j];
                    }
                    else 
                        System.out.print("*"+" ");
                }
                System.out.println(" ");
            }
            
        }
    }
  • 相关阅读:
    不要在构造中做太多事情,不然有时候会出现有意思的代码~
    对称加密和非对称加密
    关于WebAPI安全认证的问题
    Dojo和jQuery区别
    跨域访问解决方案:JSONP
    MyEclipse中提示SpringMVC的XML配置文件出错解决方法
    什么是跨域请求
    Hadoop的初步理解
    数据库读写分离的初步理解
    前端渲染和后端渲染
  • 原文地址:https://www.cnblogs.com/Amyheartxy/p/6679653.html
Copyright © 2011-2022 走看看