组队结合:张泽敏,宋家林
设计思路:将一个二维数组中的非负数块分出来,一次标上记号,在一次求这些模块的最短权值路径,以和最大的模块为基础,看加上其他模块相对最小路径权值来说是否值得(和是否大于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 }
以后的结对开发,会更加的发挥自己的长处,来完成老师的任务。