2013-04-12 2 views
0

그래서 지뢰 찾기 게임에서 계단식 표시 방법의 대부분이 있습니다. 솔루션의 보드와 현재 그리드 중 하나가 있습니다. 하지만 문제는 0 공간으로 실행하면 재귀 호출에서 스택 오버플로 오류가 발생한다는 것입니다.캐스케이드 공개를위한 지뢰 찾기 재귀

누구에게 아이디어가 있습니까? revealCell() 힘 주위에 당신의 FORS가이 반복 이상 같은 0 셀에 대해 호출 할 수 있기 때문에

public static void revealCell(int row, int col, char[][] grid, char[][] answers) { 
    System.out.println(row + " " + col); 
    if(row < 0|| row > 4){ 
     System.out.println("bad"); 
     return; 
    } 
    if(col < 0|| col > 4){ 
     System.out.println("bad"); 
     return; 
    } 
    if(answers[row][col] == 'B'){ 
     grid[row][col] = answers[row][col]; 
     return; 
    } 
    if(answers[row][col] == '1'||answers[row][col] == '2'||answers[row][col] == '3'||answers[row][col] == '4'||answers[row][col] == '5'){ 
     grid[row][col] = answers[row][col]; 
     return; 
    } 

    if(answers[row][col] == '0'){ 
     System.out.println("go"); 
     grid[row][col] = answers[row][col]; 
     for(int i = row-1; i <= row +1; i++){ 
      for(int j = col-1; j<= col +1;j++){ 
       revealCell(i,j, grid, answers); 
      } 
     } 
    } 
} 

답변

0

그것은이다. 이미 방문한 세포를 추적하여 확인할 수 있습니다. revealCell()에 전화하기 전에 확인하십시오.

+0

내가 이미 사용한 0을 어떻게 추적합니까? (격자 [I] [j]가! = '0') 재귀 호출 – bforcer

+0

, 방금 첨가. – bforcer

+0

다른 매트릭스 주위 , I 가정하는 경우, I는 I가 알아 낸 생각 – dmon

0

중첩 루프가 반복적으로 revealCell(row, col, ...)을 호출합니다. 루프를 재구성하거나 단순히 if i!=row && j!=col 가드를 삽입하십시오.

이 변경 후에도 무한 재귀가 계속 될 수 있습니다. 지뢰 찾기 게임을 코딩 한 지 꽤 오래되었지만 IIRC에서는 동일한 셀을 반복적으로 확인하는 것을 피하기 위해 4 가지 재귀 호출을 사용했습니다. 하나의 호출은 보드의 왼쪽 위 사분면을 광산 충돌 지점에서 검색했습니다. (증가 행, 증가하는 열) 등을 검색했습니다.