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

    组队结合:张泽敏,宋家林

    设计思路:将一个二维数组中的非负数块分出来,一次标上记号,在一次求这些模块的最短权值路径,以和最大的模块为基础,看加上其他模块相对最小路径权值来说是否值得(和是否大于0),值得便加上,否则不加,最后遍历完这些模块之后,便可以得到最大联通子数组

    组合过程:一起讨论思路,把数学问题转化,再想想怎么用Java来实现。碰到的问题不少,小组合作两个人集合起来,思路就很多。

      1 import java.util.Scanner;
      2 public class main {
      3  
      4     public static void main(String[] args) {
      5         // TODO Auto-generated method stub
      6          
      7              int a[][]=new int[20][20];
      8              Scanner str=new Scanner(System.in);
      9              System.out.print("请输入二维数组的行数列数:");
     10              int index=str.nextInt();
     11              int length=str.nextInt();
     12               
     13              int y=0;
     14              System.out.println("请输入数组:");
     15              for(int i=0;i<index;i++)
     16              {
     17                  for(int j=0;j<length;j++)
     18                  {
     19                     a[i][j]=str.nextInt();
     20                  }
     21              }
     22              int s=sum(a,length,index);
     23              System.out.println("最大连通子数组和:"+s);
     24     }
     25     public static int max2(int arry[],int length)
     26     {
     27             int total=0;
     28             int sum=arry[0];
     29             int minsum=arry[0];
     30             for(int i=1;i<length;i++)
     31             {
     32                 if(sum>0)
     33                 {
     34                     sum=arry[i];
     35                 }
     36                 else
     37                 {
     38                     sum=sum+arry[i];
     39  
     40                 }
     41                 if(minsum>=sum)
     42                 {
     43                     minsum=sum;
     44                 }
     45                 total=total+arry[i];
     46             }
     47             total=total+arry[0];
     48             minsum=total-minsum;
     49  
     50             return minsum;
     51     }
     52     public static int max1(int arry[],int length)  
     53     {
     54             int sum=arry[0];
     55             int maxsum=arry[0];
     56             for(int i=1;i<length;i++)    
     57             {
     58                 if(sum<0)
     59                 {
     60                     sum=arry[i];
     61                 }
     62                 else
     63                 {
     64                     sum=sum+arry[i];
     65  
     66                 }
     67                 if(maxsum<=sum)
     68                 {
     69                     maxsum=sum;
     70                 }
     71             }
     72             return maxsum;
     73     }
     74     public static int sum(int a[][],int length,int num1)
     75     {   
     76           int y=0;
     77           int d[]=new int[20];
     78           int e[]=new int[100];
     79           int c[][]=new int[100][20];
     80           c[0][0]=0;
     81           int p=0;
     82           int[] b=new int[100];
     83           b[0]=0;
     84           for(int j=0;j<num1;j++)
     85           {
     86               for(int t=j;t<num1;t++)
     87               {
     88                   for(int i=0;i<length;i++)
     89                   {
     90                       b[i]=b[i]+a[t][i];
     91                       c[p][i]=b[i];
     92                   }
     93                   p=p+1;
     94               }
     95               for(int o=0;o<100;o++)
     96               {
     97                   b[o]=0;
     98               }
     99           }
    100           for(int l=0;l<p;l++)
    101           {
    102  
    103               for(int u=0;u<length;u++)
    104               {
    105                   d[u]=c[l][u];
    106               }
    107               e[y++]=max1(d,length);
    108               e[y++]=max2(d,length);
    109  
    110           }
    111           int Max=e[0];
    112           for(int i=0;i<y;i++)
    113           {
    114  
    115               if(e[i]>=Max)
    116              {
    117                  Max=e[i];
    118              }
    119           }
    120         return Max;
    121     }
    122      
    123      
    124 }

    以后的结对开发,会更加的发挥自己的长处,来完成老师的任务。

  • 相关阅读:
    仿新浪微博的ListView下拉更新功能
    Android如何防止apk程序被反编译
    Android横竖屏切换
    如何让Android字体自适应屏幕分辨率
    开工啦,从新浪搬到这儿来。。
    nginx + php +上传大文件
    mac + apache2 +memcached +yii
    ubuntu12.04 + git server+gitosis中央服务器的安装与配置
    virtual box ubuntu 下共享文件夹+全屏显示+修改uuid+cpu虚拟化技术
    ubunut+nginx + yii + url重写(url rewrite)+mac+apache
  • 原文地址:https://www.cnblogs.com/zeminzhang/p/6679121.html
Copyright © 2011-2022 走看看