Exemple #1
0
//求解函数
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;
                }
            }
        }
    }
}
Exemple #2
0
int main()
{
    printf("the answer is:\n");
    for(int i=1;i<=N;i++)
    {
        col[1]=i; //设置第一行
        Queen(2,N);
    }
	printf("%d", count);
}
Exemple #3
0
/**
 * 算法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列的棋子
		}
	}
}
Exemple #4
0
 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();*/
}
Exemple #6
0
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;
}
Exemple #7
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;
    }
}
Exemple #8
0
 vector<vector<string> > solveNQueens(int n) {
     C = n ;
     b = new int[C];
     Queen(0);
     return res ;
 }