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

    合作人:冯硕,宫春岩

    由于本人技术有限,没有真正完成二维数组对大联通字数数组的求和,根据我自己估计,只完成了70%,下面说一下自己的思路。

    思路:

    遍历整个二维数组中所有正数作出标记,然后将每一个数据进行上下所有的搜索,乳沟他的周围有正数,则标记所有联通的小数组(已完成)。

    最终会出现一个或多个小的联通数组,最后再将所有的联通数组用最大的负数联合成一个最大联通子数组(未完成)。再看一看单独的正数加到这个联通子数组的损失程度。

    考虑加不加上。、

    复制代码
    import java.util.Scanner;
    
    public class erwei {
    static int a;static int b;
    static int [][][]zu;
    static int zong;
    static int k=2;
    static int bian = 0;
    static Scanner in=new Scanner(System.in);
    
    public static void set()
    {
        
        a=in.nextInt();
        b=in.nextInt();
        zu=new int [a][b][2];
        zong=a*b;
    }
    
    public static void fuzhi()//将二维数组的值输入
    { 
        int i,j;
        for(i=0;i<a;i++)
            for(j=0;j<b;j++)
                zu[i][j][0]=in.nextInt();
        
    }
    
    public static void biaoji()//将数组中的所有正数标记
    {
        int i,j;
        for(i=0;i<a;i++)
            for(j=0;j<b;j++)
            {
                if(zu[i][j][0]>=0)
                {
                    zu[i][j][1]=1;//证明是正数的标记;
                }
                else {
                    zu[i][j][1]=-1;//证明是负数的标记
                }    
            }
        
        for(i=0;i<a;i++)
            for(j=0;j<b;j++)
                if(zu[i][j][1]>=1)
                {        
                    
                    if(j-1>=0)//判断某行   左边是否为正数
                    if(zu[i][j-1][1]>=1)
                    {    if(zu[i][j][1]>=2)
                    {
                        System.out.println("这是第"+k+"步");
                    System.out.print(zu[i][j][0]);
                    System.out.println(zu[i][j-1][0]);
                    
                        zu[i][j-1][1]=zu[i][j][1];
                        
                    }
                    else
                    {
                        zu[i][j-1][1]=zu[i][j][1]=k;
                        
                        System.out.println("行左");
                        System.out.print(zu[i][j][0]);
                        System.out.println(zu[i][j-1][0]);
                        k++;
                    }
                    }
                    
                    
                    
                    if(j+1<a)//判断某行   右边是否为正数
                        if(zu[i][j+1][1]>=1)
                        {    if(zu[i][j][1]>=2)
                        { 
                            System.out.println("这是第"+k+"步");
                            System.out.print(zu[i][j][0]);
                            System.out.println(zu[i][j+1][0]);
                            
                            zu[i][j+1][1]=zu[i][j][1];
                            
                        }
                        else{
                            zu[i][j+1][1]=zu[i][j][1]=k;
                            
                            System.out.println("行右");
                            System.out.print(zu[i][j][0]);
                            System.out.println(zu[i][j+1][0]);
                            k++;
                        }
                        }
                    
                
                    
                    
                    
                    if(i+1<a)//    判断某列   下边是否为正数
                        
                        if(zu[i+1][j][1]>=1)
                        {    if(zu[i][j][1]>=2)
                        {
                            zu[i+1][j][1]=zu[i][j][1];
                        System.out.println("这是第"+k+"步");
                        System.out.print(zu[i][j][0]);
                        System.out.println(zu[i+1][j][0]);
                            
                        }
                        else{
                            zu[i+1][j][1]=zu[i][j][1]=k;
                        
                            System.out.println("列下");
                            System.out.print(zu[i][j][0]);
                            System.out.println(zu[i+1][j][0]);
                            k++;
                        }
                        }
                    
                    
                    
                    
                    if(i-1>=0)//判断某列    上边是否为正数
                        if(zu[i-1][j][1]>=1)
                        {    if(zu[i][j][1]>=2)
                        {
                            
                            zu[i-1][j][1]=zu[i][j][1];
                            System.out.println("这是第"+k+"步");
                            System.out.print(zu[i][j][0]);
                            System.out.println(zu[i-1][j][0]);
                            
                        }
                        
                        
                        else {zu[i-1][j][1]=zu[i][j][1]=k;
                            System.out.println("列上");
                            System.out.print(zu[i][j][0]);
                            System.out.println(zu[i-1][j][0]);
                            k++;
                        }
                        }
                }
        
                    
        
         
    }
    
    
    
    public static void shuchu()
    {
        int i,j;
        for(i=0;i<a;i++)
            for(j=0;j<b;j++)
            {
                if(zu[i][j][1]>=1)
                    System.out.println(zu[i][j][0]+"   "+zu[i][j][1]);
            }
        
        
        
        
        
        
        
    }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("请输入行数和列数");
                set();
            System.out.println("请输入数组");
                fuzhi();
                biaoji();
                shuchu();
        }
    
    }
    复制代码

    截图:

     左边是数,右边是所属子数组的编号。

    现在就缺少一个算法,来讲所有的子数组连同到一块。

  • 相关阅读:
    LR在CTR中的实践经验
    我的新书:《工业机器学习算法详解与实战》
    XSS漏洞解析(一)
    netty 解决TCP粘包与拆包问题(二)
    java实现ftp文件的上传与下载
    webService-cxf
    centos7下安装gitlab
    完全卸载删除gitlab
    tomcat 在widows的下的一些常见配置
    JAVA中使用JSch库实现SSH功能
  • 原文地址:https://www.cnblogs.com/gong123/p/6679129.html
Copyright © 2011-2022 走看看