📄 bahuanhou.txt
字号:
#define QUEENNO 8 /* 8皇后,可以变 */
#define MAXNO 32
#include <stdio.h>
#include <stdlib.h>
int X[MAXNO];
char D[MAXNO][MAXNO];
int count=0;
/ * 函数声明 */
void initiate(int n);
void nqueen(int n);
void display(int n);
main()
{int queenno=QUEENNO;
initiate(queenno);
nqueen(queenno);
printf("共有%d个解,解已经保存在文件result.txt中\n",count);
}
void initiate(int n) /*初始化 */
{int i;
for(i=0;i<n;i++)
X[i]=-1;
return;
}
void nqueen(int n)
{ int k;
X[0]=0;
k=0; /* k是当前行 */
while(k>=0)
{X[k]++; /* 移到下一行 */
while(X[k]<=n&&!place(k)) /*此处能放皇后吗?*/
{X[k]++;
}
if(X[k]<=n)
{ if(k==n-1) display(n);
else {k++;X[k]=0;}
}
else
{ k--;
}
}
}
int place(int k) /* 判断一个皇后能否放在第k行和第x[k]列*/
{
int i;
i=0;
while(i<k)
{if((X[i]==X[k])||(abs(X[i]-X[k])==abs(i-k)))/*约束条件判断*/
return 0;
i++;
}
return 1;
}
void display(int n) /*显示结果*/
{
FILE *fw;
int i,j;
count++;
fw=fopen("result.txt","a");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
D[i][j]='o';
for(i=0;i<n;i++)
D[i][X[i]-1]='*';
fprintf(fw,"%d\n",count);
fprintf(fw,"-------------------------\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{if(j==n-1)fprintf(fw,"%c \n",D[i][j]);
else fprintf(fw,"%c ",D[i][j]);
}
fprintf(fw,"-------------------------\n");
fclose(fw);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -