八皇后问题单个解.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 + -
显示快捷键?