paranocean   6년 전

https://www.digitalculture.or....

의 중급 교재에 있는 n-queen 문제를 공부하다가 의문이 생겼습니다. 중간에


for(int i=1;i<=n;i++)
 if(!col[i] && !inc[r+i] && !dec[n+(r‐i)+1])
  {
   col[i]=inc[r+i]=dec[n+(r‐i)+1]=1;
   solve(r+1);
   col[i]=inc[r+i]=dec[n+(r‐i)+1]=0;
  }
...
int main()
{
  solve(1);
...

라 나와 있습니다. 볼드처리한 부분이 제 코드와 다른 부분입니다.
궁금한 점은 두 가지입니다.
1. 왜 dec의 인덱스를 [n+r-i]가 아닌 [n+r-i+1]로 잡는가?
2. 저 코드를 그대로 베껴서 dec의 인덱스를 [n+r-i+1]로 잡은 뒤에, i를 0으로 초기화하고 solve(1)대신 solve(0)으로 바꿨을 때는 답이 왜 나오지 않는가? (저는 0번째부터 세는 것이 헷갈려서 int i=1이라 한 줄 알았는데, int i=0이 안 되는 것을 보면 그런 것 같지도 않습니다.)

질문이 좀 많기는 하지만.. 한 시간 반 동안 고민을 했는데도 답을 찾지 못한 이 불쌍한 중생을 구제해주시면 감사하겠습니다 ㅠㅠ

mokiia   6년 전

index가 0부터 시작하기 때문에 질문에 첨부된 소스대로 하면 n + 1만큼 돌게됩니다.

따라서 7번째 줄은 r >= n 으로 바뀌어야하고 13번째 줄은 i < n 으로 바뀌어야합니다

dhoh33   6년 전

배열크기를 확인해보세요.

댓글을 작성하려면 로그인해야 합니다.