2013-11-21 6 views
0

나는 미로를 만들기 위해 이미 모든 것을 포함하고있는 코드를 받았습니다. 이를미로 솔버, 대각선 이동에만

int MAX_ROWS = endRow + 1; 
int MAX_COLS = endCol + 1; 
boolean[][]visited = new boolean[MAX_ROWS][MAX_COLS]; 
protected void makeMove(int row, int col) 
{ 
    boolean found = false; 
    if (row < 0 || row >= MAX_ROWS || col < 0 || col >= MAX_COLS || visited[row][col] || maze[row][col] == 1) 
     return; 

    visited[row][col] = true; 
    found = row == endRow && col == endCol; 

    if (!found) { 
     makeMove(row, col - 1); 
     makeMove(row, col + 1); 
     makeMove(row - 1, col); 
     makeMove(row + 1, col); 
    } 
    System.out.print("\n[" + row + "," + col + "] "); // display location 
}//end makeMove 

}이와

가 시작이 왼쪽 상단에 있다고 가정하고 끝이 오른쪽 아래에 있습니다 : 나는 여기에 완료 한 미로를 해결하기 위해 makeMove 방법을 작성했다 코드는 정상적으로 작동합니다.

단지 대각선 이동이 가능하도록하지만, 지금은

.... 그것을 수정해야하고 나는이

감사를 수행하는 방법에 빈 그리기, 여전히 스탠드에 있어요 당신이 코드가 벽을 통과 할 수 있도록 할 것 때문에 어떠한 모두를 위해,

+2

도움이됩니다. –

+2

@MarcB 나는 그것이 maze [row] [col] == 1이 무엇을위한 것이라고 생각한다. – Zong

+0

@MarB a '1'은 벽을 나타냅니다. 벽에 부딪혔을 경우 역 추적합니다. – user2745043

답변

1

사용 미로 많이하지

makeMove(row - 1, col - 1); 
makeMove(row - 1, col + 1); 
makeMove(row + 1, col - 1); 
makeMove(row + 1, col + 1); 
+0

그 종류의 속임수 질문과 나는 그것이 어떻게 끝났는지 생각하고 있지만 다른 과제는 미로를 위해 1-d 배열을 사용해야하는 모든 방법을 수정하고 2-D 대신 방문했다는 것이 확실하지 않다. . 나는 열만 필요합니까, 아니면 행에 열을 어떻게 든 추가해야합니까? 모든 도움을 주셔서 감사합니다 – user2745043

+0

새로운 질문으로 다른 질문을해야하지만 도와 드릴 수 있습니다. 2D 배열을 1D 배열에 쉽게 매핑 할 수 있습니다. 배열을'boolean [] visited = new boolean [MAX_ROWS * MAX_COLS]'로 선언 한 다음 특정 행과 열의 요소에 액세스하려면'visited [MAX_COLS * row + col]'을 사용하십시오. 2D 배열을 가져 와서 행을 결합하여 긴 1D 배열을 형성하는 것으로 생각할 수 있습니다. – Zong

+0

새로운 질문이 나왔습니다. http://stackoverflow.com/questions/20126813/changing-2-d-maze-solver-to-be-used-with-1-d – user2745043