Пример #1
0
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;
		}
	}
}
Пример #2
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();
  }
}