1. 程式人生 > 其它 >第四部分

第四部分

package ahu;

import java.util.Random;
import java.util.Scanner;

public class Main4 {
public static void main(String[] str) {
Scanner sc=new Scanner(System.in);
int h=sc.nextInt(),l=sc.nextInt();
int[][] x=new int[h][l];
int[][] y=new int[h][l];
Random random=new Random();
int sum=0,zz=0;
for(int i=0;i<h;i++) {
for(int j=0;j<l;j++) {
x[i][j]=random.nextInt(100)-50;
System.out.printf("%5d",x[i][j]);
if(x[i][j]>0)
zz++;
}
System.out.println();
}
if(zz==0) {
System.out.println(maxof(x));
return;
}
System.out.println();
System.out.println();
for(int i=0;i<h;i++) {
for(int j=0;j<l;j++) {
if(x[i][j]>0) {
int sum0=sum(x,i,j,y);
huanyuan(y);
if(sum<sum0)
sum=sum0;
}
}
}
System.out.println(sum);
}
public static int maxof(int[][]x) {
int max=x[0][0];
for(int i=0;i<x.length;i++) {
for(int j=0;j<x[0].length;j++) {
if(x[i][j]>max)
max=x[i][j];
}
}
return max;
}
public static void huanyuan(int[][]y) {
for(int i=0;i<y.length;i++)
for(int j=0;j<y[0].length;j++)
y[i][j]=0;
}
public static int sum(int[][]x,int i,int j,int[][]y) {
int sum=0;
y[i][j]=1;
int[] z=new int[4];
if(i>0&&y[i-1][j]==0) {
z[0]=x[i-1][j];
}
if(i<x.length-1&&y[i+1][j]==0) {
z[1]=x[i+1][j];
}
if(j>0&&y[i][j-1]==0) {
z[2]=x[i][j-1];
}
if(j<x[0].length-1&&y[i][j+1]==0) {
z[3]=x[i][j+1];
}
for(int ii=0;ii<4;ii++) {
for(int jj=1;jj<4;jj++) {
if(z[jj-1]<z[jj]) {
int zz=z[jj-1];
z[jj-1]=z[jj];
z[jj]=zz;
}
}
}
for(int ii=0;ii<4;ii++) {
if(i>0&&y[i-1][j]==0&&x[i-1][j]==z[ii]) {
int sum0=sum(x,i-1,j,y);
if(sum0>0)
sum+=sum0;
}else if(i<x.length-1&&y[i+1][j]==0&&x[i+1][j]==z[ii]) {
int sum0=sum(x,i+1,j,y);
if(sum0>0)
sum+=sum0;
}else if(j>0&&y[i][j-1]==0&&x[i][j-1]==z[ii]) {
int sum0=sum(x,i,j-1,y);
if(sum0>0)
sum+=sum0;
}else if(j<x[0].length-1&&y[i][j+1]==0&&x[i][j+1]==z[ii]) {
int sum0=sum(x,i,j+1,y);
if(sum0>0)
sum+=sum0;
}
}
return sum+x[i][j];
}
}

第四部分

函式會在陣列選擇的位置開始不斷尋找當前周圍的最大值並延伸相加,一旦遇到負值便歸零,最後比較每次的總和選擇最大的一個。