二维数组最大值

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

设计思路:将一个二维数组中的非负数块分出来,一次标上记号,在一次求这些模块的最短权值路径,以和最大的模块为基础,看加上其他模块相对最小路径权值来说是否值得(和是否大于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 }

 

 

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

 

posted @ 2017-04-07 17:11  贼帅的火柴人  阅读(286)  评论(0编辑  收藏  举报