//求解函数 void Queen(int i,int n) { if(i>n) Output(); else { for(int j=1;j<=n;++j) { int k=1; col[i]=j; while(k<i) { if((col[k]-col[i])*(fabs(col[k]-col[i])-fabs(k-i))!=0) { k++; if(k==i) Queen(i+1,n); } else { break; } } } } }
int main() { printf("the answer is:\n"); for(int i=1;i<=N;i++) { col[1]=i; //设置第一行 Queen(2,N); } printf("%d", count); }
/** * 算法6.16,八皇后问题求解 * 进入本函数时,在n*n棋盘前i-1行已放置了互不攻击的i-1个棋子 * 现从第i行起继续为后续棋子选择合适位置 * 当i>n时,求得一个合法布局,输出之 */ void Queen(int i, int n) //i从1开始 { if (i > n) show_chess(n); //输出棋盘当前布局 else { for (int j = 1; j <= n; j++) { Place(i, j); //在第i行第j列放置一个棋子 if (illigal(i)) //若当前布局合法 Queen(i + 1, n); Remove(i, j); //移走第i行第j列的棋子 } } }
void Queen(int n) { if (n == C){ vector<string> str; string s(C,'.') ; for(int i = 0 ; i < C ; i++){ s[b[i]] = 'Q'; str.push_back(s); s[b[i]] = '.'; } res.push_back(str); }else { for (int i = 0; i < C; i++) { b[n] = i; if (place(n)) Queen(n + 1); } } }
void CChessGUI::DrawPiece(CPiece piece) { gl::Piece pieceType = decodePiece(piece); switch(pieceType) { case gl::Rook: Rook(piece); break; case gl::Biship: Biship(piece); break; case gl::Knight: Knight(piece); break; case gl::King: King(piece); break; case gl::Queen: Queen(piece); break; case gl::Pawn: Pawn(piece); break; }; //for now, just draw squares /* GLfloat glX1 = tileNumber.x*.09375+.125+.03; GLfloat glY1 = tileNumber.y*.09375+.125+.03; GLfloat glX2 = tileNumber.x*.09375+.125+.09375-.03; GLfloat glY2 = tileNumber.y*.09375+.125+.09375-.03; glColor3f(200, 10, 0); glBegin(GL_QUADS); glVertex2f(glX1,glY1); glVertex2f(glX2,glY1); glVertex2f(glX2,glY2); glVertex2f(glX1,glY2); glEnd();*/ }
int main() { int * board; int n; do { printf("Nhap vao do rong cua ban co:"); fflush(stdin); scanf("%d", &n); if (n < 0) { printf("Loi: Du lieu nhap vao khong hop le!\n"); } else { break; } } while (1); printf("Cac cach sap xep con hau\n"); board = (int *) malloc(sizeof(int) * n); if (board == NULL) { printf("Loi: Khong du bo nho!"); exit(0); } int i; for (i = 0; i < n; ++i) { board[i] = -1; } Queen(board, n); printf("Done!"); return 0; }
void Play() { CurrentBoardPosition=-1; MoveClassification=0; MoveAlreadyMadeFlag=0; Error=0; PieceError=0; if(MoveCycleNumber==1) { WhitePawnEnPassantFlag=0; BlackPawnEnPassantFlag=0; } while(Error==0) { PlayInputTranslate(); Castle(); Whitepawn(); ErrorSignal(); CHECKERROR BlackPawn(); ErrorSignal(); CHECKERROR PawnToQueen(); Rook(); ErrorSignal(); CHECKERROR Knight(); ErrorSignal(); CHECKERROR Bishop(); ErrorSignal(); CHECKERROR Queen(); ErrorSignal(); CHECKERROR King(); ErrorSignal(); CHECKERROR Etc(); ErrorSignal(); break; } }
vector<vector<string> > solveNQueens(int n) { C = n ; b = new int[C]; Queen(0); return res ; }