本机用例测试正确,请问是哪里出问题了呢
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("***");
}
}
}