inline int search(board* pb,int depth){ if(depth > N){// valid placement if(out_count<3) { output(); out_count++; } // when the chess is placed in the middle when N is odd // no need to double the solution count if( N%2 != 0 && at[1]==(N+1)/2 ) odd_count++; else sol_count++; return 1; } int i,j; for(i=1;i<=N;i++){ // symmetry break(half) // actually we can do one more half... if(depth==1 && i>(N+1)/2) break; if( (occupy(pb,depth,i)) == 0 ){ at[depth]=i; board cb; board* nb=&cb; memcpy(nb->o,pb->o,sizeof(int)*MAX); int row=depth,col=i; place(nb,depth,i); search(nb,depth+1); at[depth]=0; } } }
void hexEdit::scroll(WPARAM wParam) { WORD code = LOWORD(wParam); int oldLine = line; switch (code) { case SB_TOP: line = 0; break; case SB_BOTTOM: line = lineCount; break; case SB_THUMBPOSITION: case SB_THUMBTRACK: { SCROLLINFO si = { sizeof(si), SIF_TRACKPOS }; GetScrollInfo(scrwnd, SB_CTL, &si); line = si.nTrackPos; } break; case SB_LINEUP: line--; break; case SB_LINEDOWN: line++; break; case SB_PAGEUP: line-=rows; break; case SB_PAGEDOWN: line+=rows; break; } if (line < 0) { line = 0; } else if (line > lineCount) { line = lineCount; } if (line != oldLine) { SetScrollPos(scrwnd, SB_CTL, line, TRUE); occupy(); invalidate(); } }