2012-06-12 2 views
0

다음 코드를 실행할 때 무한 루프가 발생했습니다. 블록으로 둘러싸인 그리드 내부에서 미리 정의 된 사각형은이 구현이 실행되지 않도록 시작됩니다. 광장은 방문해야 할 경우 1로 표시되고 방문한 경우 2로 표시됩니다. 솔루션을 찾을 수없는 것 같아서 도움이되는 몇 가지 힌트가 있습니다.홍수 채우기를 사용할 때 루프가 발생했습니다.

one_count=1; 
while(one_count>0){ 
    for(int i=0;i<24;i++){ 
     for(int c=0;c<80;c++){ 
      if(create[i][c]=='1'){ 
       if(create[i-1][c]==' '){ 
        create[i-1][c]='1'; 
       } 
       if(create[i+1][c]==' '){ 
        create[i+1][c]='1'; 
       } 
       if(create[i][c-1]==' '){ 
        create[i][c-1]='1'; 
       } 
       if(create[i][c+1]==' '){ 
        create[i][c+1]='1'; 
       } 
       create[i][c]='2'; 
      } 
     } 
    } 
    one_count=0; 
    for(int i=0;i<24;i++){ 
     for(int c=0;c<80;c++){ 
      if(create[i][c]=='1'){ 
       one_count++; 
      } 
     } 
    } 
} 
+2

첫 반복에서 create [-1]에 액세스하는 것처럼 보입니다. – matchdav

+0

지적 해 주셔서 감사합니다! 명확화가 필요합니다. 시작 지점은 림에 착륙하지 않으며 채우기는 빈 공간 ('')이 아니라 X ('X')이므로 림의 한 점을 확인해서는 안됩니다. – Behemyth

+0

one_count가 루프의 끝에서 0 일 수있는 방법은 분명하지 않습니다. 사각형의 초기 조건은 무엇입니까? – matchdav

답변

0

무작위 데이터 (모서리가 'X'인 코드)에서 코드를 실행했습니다. 나는 어떤 고리도 만나지 않았다.

또한 문제가 발생하는 이유는 없습니다. 모든 픽셀이 모든 반복에서 검사되고 모든 '1'이 '2'로 변경되도록 보장됩니다. 되돌릴 방법은 없으며 반복 할 수 없습니다.

아마도 프로그램 동작에 대한 추가 정보를 제공 할 수 있습니다.

BTW : 코드에 작은 버크가 있습니다. 홍수가 바닥 당신이주기 동안 이미지도를 작성하고 있기 때문에 오른쪽으로 매우 빠르게 채워 (어려운 설명하기 위해 -> 예)주기의

  • 시작은 : 모든 생성을 제외하고 ''[2] [ 2] == '1'
  • 생성자 [2] [2]가 될 때까지 모든 요소를 ​​검사하고 이웃에 '1'을 쓰고 자발적으로 '2'를 작성하십시오
  • 다음 요소를 확인하십시오. [2] [3] 또한 '1'과 전나무 후 등 이웃에게 너무

  • 을 채우기 당신은 단지 [2] == '2'를 만들 것이라고 기대할 것입니다.하지만 오른쪽에서 아래로 모든 것은 또한 == '2'입니다.

    코드를 변경하지는 않지만 변경하면 예기치 않은 결과가 발생할 수 있습니다.

  • +0

    관찰 해 주셔서 감사합니다! 그에 따라 프로그램을 변경하겠습니다. 또한, 내 프로그램의이 섹션은 자체 포함되어야하며 좋은 강의를 만들 수도 전체를 설명합니다. = D 이것은 더 큰 범위의 다른 것들이 잘못되어 있다는 것을 의미합니다. 이상한 부분은 내가이 코드 섹션을 삭제하면 부드럽게 실행되기 때문입니다. 다시 귀하의 도움에 감사드립니다! – Behemyth

    관련 문제