aa.c

来自「有关八国皇后问题的求解」· C语言 代码 · 共 59 行

C
59
字号
#include <stdio.h>

int QueenTry(int i, int rowPos[], int col[], int leftDiag[],
			                           int rightDiag[]);

 main()
{
    	int i, flag;
    	static int rowPos[8];
	static int col[8] = {1,1,1,1,1,1,1,1};
	static int leftDiag[15] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
	static int rightDiag[15] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};

    flag = QueenTry(0, rowPos, col, leftDiag, rightDiag);
    if (flag)
    {
        printf("Result:\n");
        for (i=0; i<8; i++)
        {
            printf("%4d", rowPos[i]);
        }
        printf("\n");
    }
}

int QueenTry(int i, int rowPos[], int col[], int leftDiag[],
								   int rightDiag[])
{
	int flag, j = -1;

	do{
		j++;
		flag = 0;
		if (col[j] && leftDiag[i+j] && rightDiag[i-j+7])
		{
			rowPos[i] = j;
			col[j] = 0;
			leftDiag[i+j] = 0;
			rightDiag[i-j+7] = 0;
			if (i < 7)
			{
				flag = QueenTry(i+1, rowPos, col, leftDiag, rightDiag);
				if (!flag)
				{
					col[j] = 1;
					leftDiag[i+j] = 1;
					rightDiag[i-j+7] = 1;
				}
			}
			else
			{
				flag = 1;
			}
		}
	}while (!flag && j<7);

	return flag;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?