8皇后 n皇后 递归
来源:互联网 发布:java getclass 编辑:程序博客网 时间:2024/05/16 05:44
8皇后 可以用递归和非递归的方法,两年前用非递归试过没做出来。当时也看过别人用递归求的。现在完全想不起来了。前几天看来数据结构,只看思路,试了几个经典的递归问题,汉诺塔没做出来,全排列没做出来,8皇后也没做出来。今天用递归花几个小时重做了一下8皇后,做出来了,还是比较吃力。。。主要困惑在于什么条件下需要下一次递归,递归什么时候结束,递归结束返回上层的时候需要其他处理吗。从进到下一次递归到查找到最后逐层返回到最上层,想了好多遍。。。终于没有这个心结了。应该还能优化吧,以前看过matrix67笔记说有很快的方法,改天看别人怎么优化的,试一试非递归。可以改成n皇后
8皇后:
int a[9] = { 0 };int total;void show(int a[], int n) { int i = 0; for (i = n; i > 0; i--) { printf("%d ", a[i]); } printf(" "); if(total%4==0) putchar('\n');}int check_valid(int n, int pos) { int i; if (n == 8) return 1; for (i = 8; i > n; i--) { if (a[i] == pos || n + a[i] - i == pos || -n + a[i] + i == pos) return 0; } return 1;}void Q(int n) { int i ; int flag ; for (i = 1; i <= 8; i++) { a[n] = i; flag = check_valid(n, i); if (flag) { if (n == 1) { total++; show(a, 8); return; } else Q(n - 1); } else continue; } return;}int main(){ Q(8); printf("%d\n", total); return 0;}
n皇后
int a[1200] = { 0 };int total;void show(int a[], int n) { int i = 0; for (i = n; i > 0; i--) { printf("%d ", a[i]); } putchar('\n');}int check_valid(int rank,int n, int pos) { int i = 0; if (n == rank) return 1; for (i = rank; i > n; i--) { if (a[i] == pos || n + a[i] - i == pos || -n + a[i] + i == pos) return 0; } return 1;}void Q(int n,int rank) { int i = 0; int flag = 0; for (i = 1; i <= rank; i++) { a[n] = i; flag = check_valid(rank,n, i); if (flag) { if (n == 1) { total++; show(a, rank); return; } else Q(n - 1,rank); } else continue; } return;}int main(){ Q(12,12); printf("%d\n", total); return 0;}
阅读全文
0 0
- 8皇后 n皇后 递归
- 8皇后 n皇后 非递归
- 递归求N皇后
- n皇后问题【递归】
- 递归 N皇后问题
- 递归解n皇后
- 递归求解N皇后
- N皇后递归
- 递归-N皇后
- N皇后问题 (递归)
- 递归---n皇后问题
- N 皇后的递归解法
- n皇后问题--递归回溯
- N皇后递归剪枝实现
- 递归实现n皇后问题
- N皇后问题(递归)
- HDU2553:N皇后问题【递归】
- N皇后问题递归回溯
- 详解Cassandra数据模型中的primary key
- python多线程编程第一篇
- GitChat·前端 | Vue 组件库实践和设计
- 21-SpringBoot——核心-Web配置
- 【C#学习】类型转换
- 8皇后 n皇后 递归
- 不老的传说
- 实验吧-web-wp
- 掌握 Anko,看这一篇就够了!
- wechall-php-wp
- 欢迎使用CSDN-markdown编辑器
- Android面试题——进阶篇
- Java Scanner、PrintWriter的用法
- 1035. 插入与归并(25)