八皇后问题-C实现
2017-10-10 20:06
134 查看
最近程序的这些算法可是吃了点小亏。这是一个困饶了我很久的一个问题,以前不止一次有小伙伴同学讨论这算法个话题,每次我都觉得太难所以都只是听听不发表意见,知道最近有考试了才发现,我一直逃避的这些问题身为计算机专业的我根本不可能逃避的。所以既然逃不过那今天静下心来好好学习学习,就先从这个八皇后问题开始吧。
说实话这程序不是我自己的原创,不过借鉴别人的成果总能快速学习的对吧,比自己慢慢研究要高效很多。里面一个函数对于高手来说肯定不存在什么问题,就不要嘲笑我了。但是我自己本来就是菜鸟,所以我还是照顾 一下和我一样菜鸟的小伙伴,所以我还是介绍一下。里面有一个abs()函数这个是输出绝对值函数例如abs(-8)=8;abs(8)=8。在其他的也没啥了。
说实话这程序不是我自己的原创,不过借鉴别人的成果总能快速学习的对吧,比自己慢慢研究要高效很多。里面一个函数对于高手来说肯定不存在什么问题,就不要嘲笑我了。但是我自己本来就是菜鸟,所以我还是照顾 一下和我一样菜鸟的小伙伴,所以我还是介绍一下。里面有一个abs()函数这个是输出绝对值函数例如abs(-8)=8;abs(8)=8。在其他的也没啥了。
#include<stdio.h> #include<math.h> #define N 4 int cin = 1; bool a[N + 1][N + 1] = { 1 }; bool scan(bool a[N+1][N+1]);//输出地图函数 bool Trial(int i);//循环行和列函数 bool Decide(bool a[N+1][N+1],int i,int j );//判断是否满足要求 int main() { Trial(1);//从第一行开始判断 return 0; } bool scan(bool a[N + 1][N + 1]) {//输出地图函数 printf("sum=%d\n",cin++); for (int i = 1; i < N + 1; i++) { for (int j = 1; j < N + 1; j++) { a[i][j] == 1? printf("%2d", 0) : printf(" *"); } printf("\n"); } return true; } bool Trial(int i) {//循环行和列函数 if (i > N) scan(a); else for (int j = 1; j < N + 1; j++) { a[i][j] = 1; if (Decide(a, i, j)) Trial(i + 1); a[i][j] = 0; } return true; } bool Decide(bool a[N + 1][N + 1], int i, int j) {//判断是否满足要求 for (int m = 1; m <i; m++)//行 { for (int n = 1; n < N + 1; n++)//列 { if (a[m] ==1) if (n == j || abs(i - m) == abs(j - n)) return false; } } return true; }
相关文章推荐
- 八皇后问题的c++实现
- 八皇后问题的C语言实现
- 回溯法-八皇后问题之C实现
- C#WPF实现回溯算法解决八皇后问题
- 八皇后问题详细推导(递归和非递归,Go语言实现)
- C++实现八皇后问题
- 八皇后问题 java实现,算法两则
- 八皇后问题之python和scheme实现
- javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题
- C++简单实现八皇后问题
- 回溯法实现八皇后问题
- php 实现八皇后问题
- 八皇后问题,Java实现,可推广解决N皇后问题
- 八皇后问题,一维数组实现
- 八皇后问题之回溯算法实现<java实现>
- Java实现经典八皇后的问题
- 八皇后问题递归实现(C++)
- java实现八皇后问题示例分享
- 八皇后问题的java实现
- Python实现八皇后问题