2014-09-25 4 views
0

크기가 n * n 인 동적 행렬을 사용하는 마술 사각형 문제를 해결하려고합니다. 행렬을 1-n^2의 수로 채우고 각 행, 열 및 대각선의 합이 동일해야합니다. 알고리즘의 조건 중 하나는 루프 중 하나에서 행렬의 요소에 이미 입력 된 숫자가 있는지 확인하는 것입니다. 매트릭스의 요소 중 하나에 이미 입력 된 숫자가 있는지 확인하는 데 문제가 있으므로 요소가 비어 있는지 확인하는 방법이 궁금합니다. 그것은 encompasing 루프의 5 반복에이 if 문을 트리거 어떤 이유로다차원 배열의 요소가 비어 있는지 확인하는 방법

else if(matrix[row][col] != 0) 
    { 
     row = row + 2; 
     col--; 
    } 

:

다음은 알고리즘의 해당 부분에 대한 내 코드입니다. 저는 매직 스퀘어 (Magic Square) 알고리즘을 사용하여 종이에서 작업했습니다. 그리고 루프의 다섯 번째 반복은 행렬의 빈 요소로 가져옵니다. 요소가 비어 있으면 값 0을 유지한다고 생각했습니다. 나는 매우 혼란스러워서 어떤 도움을 주셔서 감사합니다. 고맙습니다.

답변

5

C 및 C++의 배열은 기본적으로 비어 있지 않습니다. 명시 적으로 요소를 0으로 설정하거나 0으로 초기화되는 방식으로 배열을 만들어야합니다.

당신이 직면 한 것은 입니다. 정의되지 않은 동작. 초기화되지 않은 배열에는 무작위 (읽기 가비지) 값이 있고 그 결과에 정의되지 않은 동작이 있습니다.

배열의 글로벌 범위에서 또는 static 규정이 0로 초기화됩니다 또는 initialization provided built in by the language를 사용하거나 명시 적으로 0에 각 요소를 설정할 수 있습니다로 만들었습니다.
이렇게하는 방법은 여러 가지가 있습니다. 가장 좋은 방법은 배열에서 추출 할 동작에 따라 다릅니다.

+0

나를 두들겨 + +1 – Chantola

+0

좋습니다. 각 요소를 0으로 설정했지만 어떤 이유로 루프가 여전히 트리거되고 있습니다. 각 요소를 0으로 설정 한 후 행렬을 인쇄하고 올바르게 인쇄 했으므로 여전히 작동하지 않는 이유가 확실하지 않습니다. – LurkDog

관련 문제