八皇后问题
来源:互联网 发布:大数据关联分析 编辑:程序博客网 时间:2024/05/16 13:46
八皇后问题是在8*8的棋盘上放置8枚皇后,使得棋盘中每个纵向、横向、左上至右下斜向、右上至左下斜向均只有一枚皇后。八皇后的一个可行解如图所示:
#include <iostream>using namespace std;int queen[8][8] = {0};int resultNum = 0;bool Check(int row, int column); //判断当第row-1行放置好皇后后,第row行的第column列能否放置皇后void Solve(int row); //解决第row行的皇后放置问题void PrintResult(); //打印结果int main(){ Solve(1); return 0;}bool Check(int row, int column) //判断当第row-1行放置好皇后后,第row行的第column列能否放置皇后{ int i, j; if(row == 1) //第一行的任何一列都可以放置皇后 return true; //如果在第1行到第n-1行的column列上放置有皇后,则在第row行第column列上就不能放置皇后 for(i=0; i<row-1; i++) { if(queen[i][column-1] == 1) return false; } //如果在第row行第column列的左上对角线上有皇后,则在第row行第column列上就不能放置皇后 //i = row -1; //j = column - 1; i = row-2; j = i-(row-column); while(i>=0 && j>=0) { if(queen[i][j] == 1) return false; i--; j--; } //如果在第row行第column列的右上对角线上有皇后,则在第row行第column列上就不能放置皇后 //i = row -1; //j = column + 1; i = row-2; j = row+column-i-2; while(i>=0 && j<=7) { if(queen[i][j] == 1) return false; i--; j++; } return true;}void Solve(int row) //解决第row行的皇后放置问题{ int j; //j扫描列 for(j=0; j<8; j++) { queen[row-1][j] = 1; //在第row行,第j+1列上放置皇后,看是否可行 if(Check(row, j+1) == true) //为true,说明在第row行,第j+1列上可以放置皇后 { if(row == 8) //row为8,说明已经解决到了最后一行,直接打印结果 PrintResult(); else //else的情况为还没到第8行,继续解决下一行,即第row+1行 Solve(row + 1); } queen[row-1][j] = 0; //取出该列的皇后,进行回溯,在其他列放置皇后 }}void PrintResult() //打印结果{ resultNum++; cout << "Answer " << resultNum << ": " << endl; for(int i=0; i<8; i++) { for(int j=0; j<8; j++) cout << queen[i][j] << " "; cout << endl; }}
0 0
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题(2)
- 八皇后问题(3)
- 八皇后问题
- 八皇后问题程序
- 浅谈八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题求解
- 八皇后问题
- 八皇后问题
- 八皇后问题
- WPF应用程序支持多国语言解决方案
- Spring AOP 实现机制
- 提前三天准不准
- UAC惹祸 如何进行安装程序检测
- Jsp在Struts 2中使用JSON Ajax支持
- 八皇后问题
- Coreseek:常见问题1
- SQL语句摘录
- 01背包 Java 动态规划
- Node常用函数
- Socket详解
- 【汉化】DevExpress插件中RichEdit控件的自定义汉化方法 - ExDevilLee
- JSP自定义标签学习笔记
- session丢失是怎么解决的