2016-04-07 26 views
-1
import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 
import static java.lang.System.*; 

public class Maze 
{ 
    private int[][] maze; 
    private boolean exitFound; 

    public Maze() 
    { 
     exitFound = false; 
     maze = new int[0][0]; 
    } 

    public Maze(int size, String line) 
    { 
     exitFound=false; 
     maze = new int[size][size]; 
     int spot=0; 

     for(int r= 0; r<maze.length; r++) 
     { 
      for(int c =0; c<maze[r].length; c++) 
      { 

       maze[r][c]=(line.charAt(spot*2)-48); 
       spot++; 
      } 
     } 
    } 

    public void checkForExitPath(int r, int c) 
{ 

    if (r >= 0 && r <maze.length &&c >= 0 && c < maze[0].length && maze[r][c] == 1) 
    { 

     checkForExitPath(r + 1, c); 
     checkForExitPath(r - 1, c); 
     checkForExitPath(r, c + 1); 
     checkForExitPath(r, c - 1); 
     maze[r][c] = 7; 

     if (r == maze.length-1 && c == maze[0].length-1){ 
      this.exitFound =true; 
     } 

    } 
} 

    public String toString() 
    { 
     String hol = ""; 
     for(int i = 0; i<maze.length; i++){ 

      for(int j = 0; j<maze[0].length; j++){ 
       hol += " "; 
       if(maze[i][j] == 7){ 
        hol += "1"; 

       } 
       else 
       { 
        hol += maze[i][j]; 

       } 

      } 
      hol += "\n"; 

     } 
     if(this.exitFound) 
     { 
      hol+= "exit found"; 

     } 
     else { 
      hol += "exit not found"; 
     } 
     return hol; 
    } 
} 

這是我的迷宮類中的方法checkForExitPath不工作,或者至少我想是因爲每次我這個亞軍類迷宮求解器無法找到出口

import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 
import static java.lang.System.*; 

public class MazeRunner 
{ 
    public static void main() throws IOException 
    { 
     Scanner file = new Scanner(new File("maze.dat")); 
     while(file.hasNext()) 
     { 
      int size = file.nextInt(); 
      file.nextLine(); 
      Maze test = new Maze(size, file.nextLine()); 
      test.checkForExitPath(0,0); 
      out.println(test); 
     } 
    } 
} 

唯一的輸出我得到的運行迷宮求解是沒有找到出口,但我可以找到出口。 我正在遞歸地做這件事。

+2

你試過調試嗎? –

+0

是的,但我不知道如何解決這個問題,即方法關閉後第一個如果說明 –

回答

1

您的整個方法實際上不會遞歸地工作。如果左上角有一個1,我將其從代碼中解釋爲可行的方式,則它將更改爲7,並且您的方法在不遞歸的情況下結束。
我認爲四個遞歸方法調用應該是第一個的一部分,如果塊和沒有其他塊是必要的。

+0

我改變了它,但我得到一個錯誤說java.langstackoverflow空錯誤 –

+0

你能幫助我,這將意味着很多我 –

+0

現在你創建了一個無限循環。遞歸調用應該在分配7之後(走過它),否則你將在兩個瓦片之間來回走動,左下角和上面的瓦片,我會說。 – Vampire