八皇后问题单个解.c

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

C
58
字号
#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 leftDiagonal[], int rightDiagonal[])
{
	int flag, j = -1;

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

	return flag;
}

⌨️ 快捷键说明

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