数据结构之八皇后问题
2014-04-04 13:59
330 查看
# include <stdio.h> # include <stdlib.h> int count=0; void EightQueen(int ,int (*)[8] ); bool danger(int ,int , int (*)[8] ); int main() { int chess[8][8]={0}; EightQueen(0, chess); return 0; } void EightQueen(int row, int (*chess)[8]) //这是二维数组的传递方法,有其它方法的请给我留言,谢谢! { for (int i=0;i<8;++i) { if (!danger(row,i,chess)) { chess[row][i]=1; //不危险就置1,即放入皇后 if (row<7) { EightQueen(row+1,chess); //解决下一行的问题,递归在这 } else { printf(" 第 %d 种解法\n",++count); //当所有行都解决了打印 for (int j=0;j<8;++j) { for (int k=0;k<8;++k) { printf("%d ",chess[j][k]); } printf("\n"); } printf("\n"); //system("pause"); } chess[row][i]=0; //既然已经打印了某一种结果,就把上面已经放入的皇后拿走,准备下一格的遍历 } //因为上面有递归,所以在能放入皇后的情况下是不会执行这句的,当不能放下时才逐步递归 } //递归时当然要清除上面放下的皇后,因为这个皇后放下后下面就不能放下了,所以清除 } bool danger(int row,int col,int (*chess)[8]) { int i,j; //检查行,由于代码是每一行只写入一个皇后,所以不用检查行 // for (i=0;i<8;++i) // { // if (chess[row][i]!=0) // return false; // } //检查列 for (i=0;i<8;++i) { if (chess[i][col]!=0) return true; } //检查左上 for (i=row,j=col;i>=0 && j>=0;--i,--j) { if (chess[i][j]!=0) return true; } //检查右上 for (i=row,j=col;i>=0 && j<8;--i,++j) { if (chess[i][j]!=0) return true; } //检查左下 for (i=row,j=col;i<8 && j>=0;++i,--j) { if (chess[i][j]!=0) return true; } //检查右下 for (i=row,j=col;i<8 && j<8;++i,++j) { if (chess[i][j]!=0) return true; } return false; }
相关文章推荐
- 数据结构——八皇后问题递归代码实现
- 15、数据结构笔记之十五栈的应用之栈与递归之八皇后问题
- 数据结构之Trie树
- 数据结构基础6.3:最小生成树MST(Prim、Kruskal)
- 数据结构作业——N!的位数(斯特灵公式)
- 数据结构分三种:逻辑,物理,运算
- redis 数据结构笔记
- 数据结构与算法问题 单源最短路径 浙大OJ
- 数据结构实验之排序六:希尔排序 【OJ--3403】
- 数据结构之——栈的创建于基本操作
- 【数据结构与算法】快排
- c#数据结构———二叉查找树
- 数据结构——DoubleArray Trie
- 数据结构——c语言描述 第五章 (1) 特殊矩阵的压缩存储
- 数据结构与算法复习笔记
- C语言中数据结构的基本类型(整型、浮点型和字符型)
- SQL Server 不清空数据,修改数据库字段、结构,阻止保存要求重新创建表的更改
- 实现Comparable接口对树形结构数据进行排序
- 数据库存储树形结构的数据
- 系列 - C数据结构实现 - 01