/*八皇后问题的递归算法*/
#include <stdio.h>
#include <stdlib.h>
#define N 8 /* 棋盘边长 */
#define XXN 15 /* 正(反)对角线个数 */
#define TRUE 1
#define FALSE 0
int map[N][N];/* 棋盘 */
int col[N]; /* 列 */
int XX[XXN]; /* 正对角线 */
int YY[XXN]; /* 反对角线 */
FILE* fp;
int num=0; /* 解的个数 */
/**
显示一个解
*/
void showMap()
{
int i,j;
fprintf(fp,"\n--------------------------\n");
for(i=0;i<N;i++){
for(j=0;j<N;j++)
fprintf(fp,"%-3d",map[i][j]);
fprintf(fp,"\n");
}
}
/**
递归求解函数
*/
int try(int y)
{
int i,j;
int success=FALSE;
if( y==N){ /* 求出一个解*/
showMap();
num++;
return TRUE;
}
for(i=0;i<N;i++){
if(XX[N-y+i]==0 && YY[i+y]==0 && col[i]==0) /* 保证布局要求; 对角线,列,没有重复放置棋子 */
{
XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=1;
if(try(y+1)) success=TRUE; /* 放下一个皇后 */
XX[N-y+i]=YY[i+y]=col[i]=map[y][i]=0;
}
}
return success;
}
main()
{
int i,j,result;
fp=fopen("queen8.txt","w+");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
map[i][j]=0;
for(i=0;i<XXN;i++) XX[i]=YY[i]=0;
fprintf(fp,"\n start..............");
if(!try(0))printf("\n no resolution!");
fprintf(fp,"\n num=%d",num);
}
bhh.rar_八皇后递归_皇后问题
版权申诉
142 浏览量
2022-09-21
03:12:43
上传
评论
收藏 1KB RAR 举报
朱moyimi
- 粉丝: 61
- 资源: 1万+
最新资源
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- python烟花代码.rar
- 实验目的: 1.构建基于verilog语言的组合逻辑电路和时序逻辑电路; 2.掌握verilog语言的电路设计技巧 3.完成如
- 扩展卡尔曼滤波matlab仿真
- 3_base.apk.1
- 躺赢者PRO飞控常见典型问题合集(续一)无名小哥 余义 20240501待修
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈