程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是:
数组的行数,
数组的列数,
每一行的元素, (用逗号分开)
每一个数字都是有符号32位整数,当然,行数和列数都是正整数。
5 | 8 | 2 |
7 | 9 | 6 |
初步的想法是成块相加通过循环得出结果
及(1,1)+(1,2)和(1,1)+(1,2)+(1,3)+(1,n)比较
之后比较(1,1)+(2,1)+(n,1)
然后比较(1,1)+(1,2)+(2,1)+(2,2)+(1,n)+(n,1)+(n,n)
即:
点、行、块
package geren_04;
class D//点
{
private int num;
private int x;
private int y;
public D(){};
public D(int num,int x,int y)
{
this.num=num;
this.x=x;
this.y=y;
}
public D(int x,int y)
{
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public void show()
{
System.out.println("("+x+" , "+y+" ) : "+num);
}
}
{
private int num;
private int x;
private int y;
public D(){};
public D(int num,int x,int y)
{
this.num=num;
this.x=x;
this.y=y;
}
public D(int x,int y)
{
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public void show()
{
System.out.println("("+x+" , "+y+" ) : "+num);
}
}
package geren_04;
import java.util.ArrayList;
public class H //行
{
private int sum;
private D Z;
private D Y;
private ArrayList<D> h;
public H() {}
public H(D Z,D Y)
{
this.Z=Z;
this.Y=Y;
}
public String toString()
{
String s="";
s+="# \n( "+Z.getX()+" , "+Z.getY()+" ) to ( "+Y.getX()+" , "+Y.getY()+" )";
for(int i=0;i<h.size();i++)
{
s+=h.get(i)+" ";
}
s+="#\n";
return s;
}
public void setValue(ArrayList<D> h)
{
this.h=h;
}
public int getSum()
{
D d=new D();
sum=0;
for(int i=0;i<h.size();i++)
{
d=h.get(i);
sum+=d.getNum();
}
return sum;
}
public int getD(int i)
{
return h.get(i).getNum();
}
public void show()
{
System.out.println("# \n( "+Z.getX()+" , "+Z.getY()+" ) to ( "+Y.getX()+" , "+Y.getY()+" )");
for(int i=0;i<h.size();i++)
{
System.out.print(h.get(i).getNum()+" ");
}
System.out.println("\n#\n");
}
public D getZ() {
return Z;
}
public void setZ(D z) {
Z = z;
}
public D getY() {
return Y;
}
public void setY(D y) {
Y = y;
}
public void setSum(int sum) {
this.sum = sum;
}
}
{
private int sum;
private D Z;
private D Y;
private ArrayList<D> h;
public H() {}
public H(D Z,D Y)
{
this.Z=Z;
this.Y=Y;
}
public String toString()
{
String s="";
s+="# \n( "+Z.getX()+" , "+Z.getY()+" ) to ( "+Y.getX()+" , "+Y.getY()+" )";
for(int i=0;i<h.size();i++)
{
s+=h.get(i)+" ";
}
s+="#\n";
return s;
}
public void setValue(ArrayList<D> h)
{
this.h=h;
}
public int getSum()
{
D d=new D();
sum=0;
for(int i=0;i<h.size();i++)
{
d=h.get(i);
sum+=d.getNum();
}
return sum;
}
public int getD(int i)
{
return h.get(i).getNum();
}
public void show()
{
System.out.println("# \n( "+Z.getX()+" , "+Z.getY()+" ) to ( "+Y.getX()+" , "+Y.getY()+" )");
for(int i=0;i<h.size();i++)
{
System.out.print(h.get(i).getNum()+" ");
}
System.out.println("\n#\n");
}
public D getZ() {
return Z;
}
public void setZ(D z) {
Z = z;
}
public D getY() {
return Y;
}
public void setY(D y) {
Y = y;
}
public void setSum(int sum) {
this.sum = sum;
}
}
package geren_04;
import java.util.ArrayList;
class K//块
{
private int flag;
//左上顶点
private D ZS;
//右上顶点
private D YS;
//左下顶点
private D ZX;
//右下顶点
private D YX;
private int l;//长-横着
private int w;//宽-竖着
private int sum;
private ArrayList<H> k=new ArrayList<H>();
public K() {l=0;w=0;}
public K(D ZS,D YS, D ZX, D YX)
{
this.ZS=ZS;
this.YS=YS;
this.ZX=ZX;
this.YX=YX;
this.l=YS.getX()-ZS.getX();
this.w=ZX.getY()-ZS.getY();
}
public void setValue(ArrayList<H> k)
{
this.k=k;
}
public int getSum()
{
sum=0;
for(int i=0;i<w;i++)
{
sum+=k.get(i).getSum();
}
return sum;
}
public void show()
{
H h=new H();
System.out.println("#\n( "+ZS.getX()+" , "+ZS.getY()+" ) to ( "+YS.getX()+" , "+YS.getY()+" )");
System.out.println("( "+ZX.getX()+" , "+ZX.getY()+" ) to ( "+YX.getX()+" , "+YX.getY()+" )");
for(int i=0;i<w;i++)
{
for(int t=0;t<l;t++)
{
System.out.print(k.get(i).getD(t)+"\t");
}
System.out.println("");
}
System.out.println("#\n");
}
public D getD(int x,int y)
{
D d=new D();
d.setX(x);
d.setY(y);
d.setNum(k.get(y).getD(x));
return d;
}
public D getZS() {
return ZS;
}
public void setZS(D zS) {
ZS = zS;
}
public D getYS() {
return YS;
}
public void setYS(D yS) {
YS = yS;
}
public D getZX() {
return ZX;
}
public void setZX(D zX) {
ZX = zX;
}
public D getYX() {
return YX;
}
public void setYX(D yX) {
YX = yX;
}
public int getL() {
return l;
}
public void setL(int l) {
this.l = l;
}
public int getW() {
return w;
}
public void setW(int w) {
this.w = w;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}
class K//块
{
private int flag;
//左上顶点
private D ZS;
//右上顶点
private D YS;
//左下顶点
private D ZX;
//右下顶点
private D YX;
private int l;//长-横着
private int w;//宽-竖着
private int sum;
private ArrayList<H> k=new ArrayList<H>();
public K() {l=0;w=0;}
public K(D ZS,D YS, D ZX, D YX)
{
this.ZS=ZS;
this.YS=YS;
this.ZX=ZX;
this.YX=YX;
this.l=YS.getX()-ZS.getX();
this.w=ZX.getY()-ZS.getY();
}
public void setValue(ArrayList<H> k)
{
this.k=k;
}
public int getSum()
{
sum=0;
for(int i=0;i<w;i++)
{
sum+=k.get(i).getSum();
}
return sum;
}
public void show()
{
H h=new H();
System.out.println("#\n( "+ZS.getX()+" , "+ZS.getY()+" ) to ( "+YS.getX()+" , "+YS.getY()+" )");
System.out.println("( "+ZX.getX()+" , "+ZX.getY()+" ) to ( "+YX.getX()+" , "+YX.getY()+" )");
for(int i=0;i<w;i++)
{
for(int t=0;t<l;t++)
{
System.out.print(k.get(i).getD(t)+"\t");
}
System.out.println("");
}
System.out.println("#\n");
}
public D getD(int x,int y)
{
D d=new D();
d.setX(x);
d.setY(y);
d.setNum(k.get(y).getD(x));
return d;
}
public D getZS() {
return ZS;
}
public void setZS(D zS) {
ZS = zS;
}
public D getYS() {
return YS;
}
public void setYS(D yS) {
YS = yS;
}
public D getZX() {
return ZX;
}
public void setZX(D zX) {
ZX = zX;
}
public D getYX() {
return YX;
}
public void setYX(D yX) {
YX = yX;
}
public int getL() {
return l;
}
public void setL(int l) {
this.l = l;
}
public int getW() {
return w;
}
public void setW(int w) {
this.w = w;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}
package geren_04;
import java.util.ArrayList;
public class KUtil
{
public static int max(int... a)//最大
{
int max=a[0];
for(int i:a)
{
if(max<=i)
{
max=i;
}
}
return max;
}
public static int min(int... a)//最小
{
int min=a[0];
for(int i:a)
{
if(min>=i)
{
min=i;
}
}
return min;
}
public static K KCreateAll(int w,int l,int[][] list)//初始化最大的块 k all,有bug刚改,所有怀疑下面几个也有bug
{
D zs=new D(0,0);
D ys=new D(l,0);
D zx=new D(0,w);
D yx=new D(l,w);
K k=new K(zs,ys,zx,yx);
ArrayList<H> kList=new ArrayList<H>();
ArrayList<D> hList=new ArrayList<D>();
H h=new H();
D d=new D();
D z=new D();
D y=new D();
for(int i=0;i<w;i++)
{
hList=new ArrayList<D>();
h=new H();
z=new D();
y=new D();
z.setX(0);
y.setX(l);
z.setY(i);
y.setY(i);
for(int t=0;t<l;t++)
{
d=new D();
d.setX(t);
d.setY(i);
d.setNum(list[i][t]);
hList.add(d);
//hList.get(hList.size()-1).show();
}
h.setZ(z);
h.setY(y);
h.setValue(hList);
h.getSum();
kList.add(h);
kList.get(0).show();
}
k.setValue(kList);
k.getSum();
return k;
}
public static ArrayList<K> KCreate(int w,int l,int[][] list)//创建块,怀疑有bug
{
ArrayList<K> EKList=new ArrayList<K>();
K k;
D d=new D();
H h;
ArrayList<H> kList=new ArrayList<H>();
ArrayList<D> hList=new ArrayList<D>();
//创建块
for(int i=0;i<w;i++)
{
for(int t=0;t<l;t++)
{
kList.clear();
hList.clear();
d.setX(t);
d.setY(i);
d.setNum(list[i][t]);
k=new K(d,d,d,d);
h=new H(d,d);
hList.add(d);
h.setValue(hList);
kList.add(h);
k.setValue(kList);
k.getSum();
}
}
return EKList;
}
public static K KAdd(K k1,K k2,K all)//块的加法,怀疑有bug
{
D zs=new D();
D ys=new D();
D zx=new D();
D yx=new D();
D d1=new D();
D d2=new D();
//确定四个角
//左上的点
d1=k1.getZS();
d2=k2.getZS();
//x
zs.setX(min(d1.getX(),d2.getX()));//取最小
//y
zs.setY(min(d1.getY(),d2.getY()));//取最小
//右上的点
d1=k1.getYS();
d2=k2.getYS();
//x
ys.setX(min(d1.getX(),d2.getX()));//取最小
//y
ys.setY(min(d1.getY(),d2.getY()));//取最小
//左下的点
d1=k1.getZX();
d2=k2.getZX();
//x
zx.setX(min(d1.getX(),d2.getX()));//取最小
//y
zx.setY(min(d1.getY(),d2.getY()));//取最小
//右下的点
d1=k1.getYX();
d2=k2.getYX();
//x
yx.setX(min(d1.getX(),d2.getX()));//取最小
//y
yx.setY(min(d1.getY(),d2.getY()));//取最小
//
K k=new K(zs,ys,zx,yx);
/*赋值*/
//获得LIST
ArrayList<H> kList=new ArrayList<H>();
ArrayList<D> hList=new ArrayList<D>();
H h=new H();
D d=new D();
D z=new D();
D y=new D();
z.setX(zs.getX());
y.setX(ys.getX());
for(int i=0;i<k.getW();i++)
{
hList.clear();
z.setY(zs.getY()+i);
for(int t=0;t<k.getL();t++)
{
d=all.getD(t, i);
hList.add(d);
}
h.setZ(z);
h.setY(y);
h.setValue(hList);
h.getSum();
kList.add(h);
}
k.setValue(kList);
k.getSum();
return k;
}
}