Alex_sxi 2014-10-19 09:32
浏览 889

zoj ACM 1002题,运行显示runtime err

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


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("***");
    }

}

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 很想要一个很好的答案或提示
    • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
    • ¥15 怀疑手机被监控,请问怎么解决和防止
    • ¥15 Qt下使用tcp获取数据的详细操作
    • ¥15 idea右下角设置编码是灰色的
    • ¥15 全志H618ROM新增分区
    • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
    • ¥15 NAO机器人的录音程序保存问题
    • ¥15 C#读写EXCEL文件,不同编译
    • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL