电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

数据结构与算法专题实验实验报告_八皇后_背包问题的求解_农夫过河VIP专享VIP免费

数据结构与算法专题实验实验报告_八皇后_背包问题的求解_农夫过河_第1页
数据结构与算法专题实验实验报告_八皇后_背包问题的求解_农夫过河_第2页
数据结构与算法专题实验实验报告_八皇后_背包问题的求解_农夫过河_第3页
八皇后问题 1.问题描述 设在初始状态下在国际象棋的棋盘上没有任何棋子(这里的棋子指皇后棋子)。然后顺序在第1 行,第2 行……第8 行上布放棋子。在每一行中共有8 个可选择的位置,但在任一时刻棋盘的合法布局都必须满足 3 个限制条件(1)任意两个棋子不得放在同一行(2)任意两个棋子不得放在同一列上(3)任意棋子不得放在同一正斜线和反斜线上。 2.基本要求 编写求解并输出此问题的一个合法布局的程序。 3、实现提示: 在第i 行布放棋子时,从第1 列到第8 列逐列考察。当在第i 行第j 列布放棋子时,需要考察布放棋子后在行方向、列方向、正斜线和反斜线方向上的布局状态是否合法,若该棋子布放合法,再递归求解在第i+1 行布放棋子;若该棋子布放不合法,移去这个棋子,恢复布放该棋子前的状态,然后再试探在第i 行第j+1 列布放棋子。 4 程序代码 #inclu de #inclu de static char Qu een[8][8]; static int a[8]; static int b[15]; static int c[15]; static int Qu eenNu m=0; //记录总的棋盘状态数 v oid qu (int i); //参数 i 代表行 int main() { int Line,Column; //棋盘初始化,空格为*,放置皇后的地方为@ for(Line=0;Line<8;Line++) { a[Line]=0; //列标记初始化,表示无列冲突 for(Column=0;Column<8;Column++) Queen[Line][Column]='*'; } //主、从对角线标记初始化,表示没有冲突 for(Line=0;Line<15;Line++) b[Line]=c[Line]=0; qu(0); return 0; } void qu(int i) { int Column; for(Column=0;Column<8;Column++) { if(a[Column]==0&&b[i-Column+7]==0&&c[i+Column]==0) //如果无冲突 { Queen[i][Column]='Q'; //放皇后 a[Column]=1; //标记,下一次该列上不能放皇后 b[i-Column+7]=1; //标记,下一次该主对角线上不能放皇后 c[i+Column]=1; //标记,下一次该从对角线上不能放皇后 if(i<7) qu(i+1); //如果行还没有遍历完,进入下一行 else //否则输出 { //输出棋盘状态 int Line,Column; cout<<"第"<<++QueenNum<<"种状态为:"<

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群