2 u013587472 u013587472 于 2014.10.19 17:32 提问

zoj ACM 1002题,运行显示runtime err
acm

本机用例测试正确,请问是哪里出问题了呢


import java.util.ArrayList;
import java.io.BufferedInputStream;

import java.util.Scanner;
public class Main {
public static int MaxNum=0;
public static ArrayList MaxNumArray=new ArrayList();

private static int _Range;

public int get_Range() {
    return _Range;
}

public void set_Range(int _Range) {
    this._Range = _Range;
}

public static void main(String args[]){
    boolean flag=true;
    while(flag){
        InputResource();
        if(_Range==0){
            flag=false;
            continue;}
        int [][] Matrixs=new int [_Range][_Range];
        InputMap(_Range,Matrixs);
        //OutputMap(_Range,Matrixs);
        //System.out.println("************Begin**********");
        Iteration(_Range,Matrixs,0,0);
        System.out.println(MaxNum);
        MaxNumArray.add(MaxNum);
        MaxNum=0;
        _Range=0;
    }

// for(int i=0;i<MaxNumArray.size();i++){
// System.out.println(MaxNumArray.get(i));
// }
}

public static void InputResource(){
    Scanner sc=new Scanner(System.in);
    _Range=sc.nextInt();        
}

public static void InputMap(int Range,int [][]Matrix){
    Scanner sc=new Scanner(new BufferedInputStream(System.in));
    char[][] tempMatrix=new char[Range][Range];

    for(int j=0;j<Range;j++){           //Input the resource of Map.            
            tempMatrix[j]=sc.next().substring(0,Range).toCharArray();
    }

    for(int j=0;j<Range;j++){           //Input the resource of Map.
        for(int k=0;k<Range;k++){
            if(tempMatrix[j][k]=='X'){              //Location the 'Wall' in the String.
                Matrix[j][k]=-1;
            }
        }
    }
}

public static void OutputMap(int Range,int [][]Matrix){
    System.out.println("******Output*****");
    for(int j=0;j<Range;j++){               //Output the Map
        for(int k=0;k<Range;k++){
            if(Matrix[j][k]==-1){
                System.out.print(Matrix[j][k]+" ");
            }
            else System.out.print(" "+Matrix[j][k]+" ");
        }
        System.out.println();
    }
    System.out.print("***************");
    System.out.println();
}

public static boolean Caculate(int Range,int [][]Matrix,int row,int colum){
    int sum=0;
    for(int i=0;i<Range;i++){
        sum=sum+Matrix[i][colum];
    }
    if (sum>0)
    return false;
    sum=0;
    for(int i=0;i<Range;i++){
        sum=sum+Matrix[row][i];
    }
    if (sum>0)
    return false;
    for(int i=row-1;i>=0;i--){
        if(Matrix[i][colum]==1)
            return false;
        if(Matrix[i][colum]==-1)
            break;
    }
    for(int i=row+1;i<Range;i++){
        if(Matrix[i][colum]==1)
            return false;
        if(Matrix[i][colum]==-1)
            break;
    }
    for(int i=colum-1;i>=0;i--){
        if(Matrix[row][i]==1)
            return false;
        if(Matrix[row][i]==-1)
            break;
    }
    for(int i=colum+1;i<Range;i++){
        if(Matrix[row][i]==1)
            return false;
        if(Matrix[row][i]==-1)
            break;
    }
    return true;

}

public static void Iteration(int Range,int[][] Matrix,int Start,int latitude){
    int [][] tempMatrix=new int[Range][Range];
    for(int i=0;i<Range;i++){
        for(int j=0;j<Range;j++){
            tempMatrix[i][j]=Matrix[i][j];
        }
    }
    int num=0;
    for(int i=Start;i<Range;i++)
    {
        for(int j=latitude;j<Range;j++){
            if(i+1<Range){
                for(int k=i+1;k<Range;k++)
                {   
                    if(Matrix[k][j]==-1)
                        break;
                    //System.out.println("************Flag**********");
                    Iteration(Range,tempMatrix,k,j);
                }
            }
            if(tempMatrix[i][j]==0){

// System.out.println("i="+i);
// System.out.println("j="+j+"*************");
if(Caculate(Range, tempMatrix, i, j)){
tempMatrix[i][j]=1;
}
}
}

}
if(latitude+1<Range){
for(int i=0;i<Range;i++)
{
for(int j=latitude+1;j<Range;j++){
if(i+1<Range){
for(int k=i+1;k<Range;k++)
{

if(Matrix[k][j]==-1)
break;
//System.out.println("************Flag**********");
Iteration(Range,tempMatrix,k,j);
}
}
if(tempMatrix[i][j]==0){
// System.out.println("i="+i);
// System.out.println("j="+j+"*************");
if(Caculate(Range, tempMatrix, i, j)){
tempMatrix[i][j]=1;
// OutputMap(Range,tempMatrix);
}
}
}

}
}

    for(int i=0;i<Range;i++){
        for(int j=0;j<Range;j++){
            if(tempMatrix[i][j]==1)
                num++;
        }
    }
    if (MaxNum<num){
        MaxNum=num;
        //System.out.println(MaxNum);
        //OutputMap(Range,tempMatrix);
        //System.out.println("***");
    }

}

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!