2015-01-09 2 views
0

그래서 재귀 자바 함수에서 미로를 풀어 달라는 요청을 받았지만 재귀 함수가 나던 올바른 경로를 '*'로 바꾸는 문제가 발견됩니다.자바 미로 해결 문제

도움을 주시면 감사하겠습니다.

public class Maze 
{ 

/** 
* This is only an example, 
* you can change this to test other cases but don't forget to submit the work with this main. 
* @param args 
*/ 
public static void main(String[] args) 
{ 
    int M = 4; 
    int N = 4; 
    char[][] maze = {{'1','0','0','0'},{'1','1','0','0'},{'0','1','1','1'},{'0','0','0','1'}}; 

    if (findPath(maze, 0,0)) 
     printMaze(maze); 
    else 
     System.out.println("No solution"); 
} 

private static void printMaze(char[][] maze) 
{ 
    for (int i = 0; i < maze.length; i++) 
    { 
     for (int j = 0; j < maze[0].length; j++) 
     { 
      System.out.print(maze[i][j] +" "); 
     } 
     System.out.println(); 
    } 

} 

// you should implement this function 
private static boolean findPath(char[][] maze, int i, int j) 
{ 
    if ((i+1 > maze.length) || (j+1 > maze[i].length)) 
     return false; 
    else 
    { 
     if (maze[i][j] == 1) 
     { 
      maze[i][j] = '*'; 
      if (maze[i+1][j] == 1) 
      { 
       return findPath(maze, i+1, j); 
      } 
      if (maze[i][j+1] == 1) 
      { 
       return findPath(maze, i, j+1); 
      } 
     } 
    } 
    return true; 
} 

}

+1

무슨 일, 당신은 단지 바로 아래로 이동하여 경로를 찾기 위해 노력하고 왼쪽은 어떻습니까? – Dejan

+0

나는 방향 코드를 끝내지 못한다. 내 문제는 '1'을 '*'로 바꾼다는 것이 아니라, 여기에 대한 답을 쉽게 찾을 수 있고, 나 혼자서 이해하고, 다른 방향을 찾는 것이 간단하다는 것이다. –

답변

3

당신은 숫자 1과 숫자 1을 나타내는 문자가 서로 다른 두 가지입니다

if (maze[i][j] == 1) 

if (maze[i][j] == '1') 

해야 1에 따옴표를 놓치고있어 Java (및 다른 정적으로 유형화 된 언어)에있는 항목이므로 해당 항목이 동일한 지 확인할 수 없습니다.

나는 왼쪽과 위로 검색하지 않는 것 같아 코드가 모든 경로를 찾을 수 있을지 의심 스럽다.

+0

감사합니다. 그게 뭔지 실종됐다. 지금은 다른 모든 방향을 추가하고 outOfBounds 오류 메신저를 수정;) –

2

사용이 코드 :

private static boolean findPath(char[][] maze, int i, int j) 
{ 
     if (maze[i][j] == 1) 
     { 
      maze[i][j] = '*'; 
      if ((i+1 > maze.length && maze[i+1][j] == '1' && findPath(maze, i+1, j)) 
      { 
       return true; 
      } 
      if ((j+1 > maze[i].length) && maze[i][j+1] == '1' && findPath(maze, i, j+1)) 
      { 
       return true; 
      } 
      if (i>=1 && maze[i-1][j] == '1' && findPath(maze, i-1,j)){ 
       return true; 
      } 
      if(j>=1 && maze[i][j-1] == '1' && findPath(maze, i,j-1)){ 
       return true; 
      } 
     } 
    return false; 
} 
+0

그것은 작동하지 않습니다, 0,0에서 1 만 대체되고 있습니다. –

+0

솔루션을 업데이트 한 경우 재귀 호출이 실제로 발견되었는지 확인해야합니다. 그러나 어쨌든 끝날 수 있기 때문에 그것이 실제로 끝날 것인지 아직 모르겠습니다. – Dejan

+0

작동하지 않습니다. 해결책을 반환하지 않습니다. 시도 덱스터 주셔서 감사합니다하지만 이미 그것을 해결했습니다;) –