📄 8queens.c
字号:
/****************************************************
* *
* exp4.c *
*
* *
****************************************************/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 6
typedef enum{FALSE,TRUE}BOOL;
BOOL place(int k);
void NQUEENS(int n);
void OUTPUT(void);
int X[N+1];
int total=0;
int main()
{
NQUEENS(1);
printf("\nTotal:%5d\n",total);
return 0;
}
BOOL place(int k)
{
int i;
i=1;
while (i<k)
{
if (X[i]==X[k] || abs(X[i]-X[k])==abs(i-k))
return FALSE;
i++;
}
return TRUE;
}
void nextqueens(int k)
{
while(1)
{
X[k] ++;
while (X[k]<=N && !place(k))
{
X[k]=X[k]+1;
}
if(X[k] > N) {X[k] = 0;return;}
else break;
}
}
void NQUEENS(int k)
{
int j;
while(1)
{
nextqueens(k);
if(X[k] == 0) break;
if (k == N)
{
OUTPUT();
total++;
}
else NQUEENS(k+1);
}
}
void OUTPUT()
{
int i,j,k;
printf(" ");
for (i=1; i<=N; i++) printf("%4d",i);
printf("\n ");
for (i=1; i<=N; i++) printf("+---");
printf("+\n");
for (i=1; i<=N; i++)
{
printf("%-2d",i);
for (j=1; j<X[i]; j++) printf("| ");
printf("| Q ");
for (j=X[i]+1; j<=N; j++) printf("| ");
printf("|\n");
printf(" ");
for (k=1; k<=N; k++) printf("+---");
printf("+\n");
}
if (!((total+1)%2))
{
printf("Press any key to continue...\n");
// getche();
}
else printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -