2013-02-13 4 views
0
나는 N 여왕의 문제에 "바보"솔루션을 찾고 있어요

내가 코드에있는 동안 루프에 의해 혼란 스러워요 다음 INT 주에서루프가 수행하는 동안 무엇을합니까?

bool check(int b[8][8]) 
{ 

    for(int c = 7; c >= 0; c--) 
    { 
    int r = 0; 
    while(b[r][c] != 1) //this is the while loop I was talking about 
    { 
    r++; 
    } //end while loop 

    for(int i = 1; i <= c; i++) 
    { 
    if(b[r][c-i] == 1) 
     return false; 
    else if ((r-i)>=0 && b[r-i][c-i] == 1) 

     return false; 
    else if ((r+i)<=7 && b[r+i][c-i] == 1) 
     return false; 
    } 

    } 
return true; 
} 

() 나는 루프 (8)이 있고 가장 안쪽 루프에서 보드의 전체 첫 행을 1로 초기화합니다. 그런 다음 함수를 호출하고 함수를 호출 한 후 전체 첫 행을 다시 0으로 재설정합니다. 필요한 경우 int main을 표시 할 수 있습니다.

+0

바깥의 for 루프에 의해 제어되는 각 열'c '에 대해'while '은'b [r] [c]'가있는 행을 찾는 배열'b'의'r' 열을 밟습니다. 1. 모든 행의 열에 1이 있으면 범위를 벗어난 메모리에 액세스합니다. 거기에 더 무엇을 말 할까? 이것은 나이트 투어인가, 여왕 여덟 문제인가, 체커 게임인가? –

+2

누가이 변수들의 이름을 찾았는지 찾아 내게 열심히. – Aesthete

+0

여덟 퀸. 프로그램이 이미 첫 줄 전체를 1로 초기화했기 때문에 보드의 맨 오른쪽에서 시작하기 때문에이 while 루프는 기본적으로 b [0] [7]에서 b [1] [7]로 건너 뜁니다. – Chase

답변

3

코드를 들여 쓰기하면 도움이됩니다.

while -loop은 for -loop 내에 있습니다. 값이 1이 아닌 정사각형 (b[r][c])을 찾을 때까지 현재 열 (c)의 행 (r)을 검색하고 있습니다. 그 의미는 무엇이든간에 아마도 빈 정사각형을 의미합니다.

읽을 수 없다는 사실은 눈에 띄게 명명 된 식별자의 중요성과 코드에서 "매직 넘버"를 사용하지 않는다는 것을 강조합니다.

추천 도서 : The Practice of Programming (Professional Computing) by Brian W. Kernighan and Rob Pike.

+3

+1 모든 우수 사례 기술에 대해 ... – IAbstract

1

바깥 쪽 for은 감소합니다. c입니다. c 값은 배열 요소를 인덱싱합니다. While-loop은 2 차원 배열에서 헤드 요소를 반복합니다. [r][c]에있는 배열 요소가 1이 아닌 동안 검사를 계속합니다. 나는 r에 어떤 경계도 검사하고있는 것을 보지 못한다.

+0

+1 경계 검사 언급. – Johnsyweb

관련 문제