⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aa.c

📁 有关八国皇后问题的求解
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -