八皇后——递归学习
来源:互联网 发布:天猫双11交易数据 编辑:程序博客网 时间:2024/06/05 14:21
问题背景:
该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。
一个以国际象棋为背景的问题:如何能够在 8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4时问题有解。
问题分析:
可以考虑递归,优化之类的我现在还不会先挖个坑以后补。
1) 建立棋盘即8*8
2) 参数划分(代码借鉴小甲鱼,略有修改)
3) 如何递归
4) 回溯法是什么
代码:
/* * 八皇后.cpp * * Created on: 2015年10月26日 * Author: Snail */ #include<stdio.h> int count=0; int n=0; int PrintCheer(int (*cheer)[8]){ for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ printf("%d",(*(*(cheer+i)+j))); } printf("\n"); }} int Safe(int floor ,int n,int(*cheer)[8]){ int i,j; int sign=0; for(i=0;i<8;i++){ if(*(*(cheer+i)+n)){ sign=1;break; } } for(i=floor,j=n;i>=0&&j>=0;i--,j--){ if(*(*(cheer+i)+j)){ sign=1;break; } } for(i=floor,j=n;i<8&&j<8;i++,j++){ if(*(*(cheer+i)+j)){ sign=1;break; } } for(i=floor,j=n;i>=0&&j<8;i--,j++){ if(*(*(cheer+i)+j)){ sign=1;break; } } for(i=floor,j=n;i<8&&j>=0;i++,j--){ if(*(*(cheer+i)+j)){ sign=1;break; } } if(sign){ return 0; }else{ return 1; }} void EightQuees(int floor,int(*cheer)[8]){ int cheers2[8][8]; for(int i=0;i<8;i++){ for(intj=0;j<8;j++){ cheers2[i][j]=cheer[i][j]; } } if(floor==8){ printf("第 %d 种\n",++count); PrintCheer(cheers2); printf("\n"); }else{ for(int j=0;j<8;j++){ if(Safe(floor,j,cheers2)){ for(inti=0;i<8;i++){ *(*(cheers2+floor)+i)=0; } *(*(cheers2+floor)+j)=1; EightQuees(floor+1,cheers2); } } }} int main(){ int cheers[8][8]; for(int i=0;i<8;i++){ for(intj=0;j<8;j++){ cheers[i][j]=0; } } EightQuees(0,cheers); return 0;}
0 0
- 八皇后——递归学习
- 八皇后 —— 递归
- 八皇后问题—递归实现
- 八皇后问题(递归、非递归——回溯)
- 八皇后的问题 递归用法学习
- 八皇后问题——递归+回溯法
- 递归的应用——八皇后问题
- 八皇后问题——递归的应用
- 八皇后问题求解——之递归
- 数据结构——八皇后问题递归代码实现
- Python学习笔记—八皇后问题
- 八皇后递归实现
- 递归:: 八皇后问题
- 八皇后问题--递归
- 【递归】八皇后问题
- 递归之八皇后
- 递归 八皇后复习
- 八皇后递归求解
- QtDesigner:Calculator Builder Example
- CString::TrimLeft和CString::TrimRight
- CODEVS1048石子归并
- 第一个cocos2dx-lua游戏--蚂蚁进洞
- 51nod 1368:黑白棋 二分图最大匹配
- 八皇后——递归学习
- 主线程和子线程的同步控制
- 1040. 有几个PAT(25)
- 磁盘驱动器
- ——黑马程序员——C语言中一维数组基本概念和初始化
- mysql5.6.26改变默认数据目录问题
- 博客又要搬家了。。 搬回ltwy.me
- Linux wait函数解析2
- MyBatis的初步使用