全排列问题、八皇后问题、组合问题的递归解法
2016-04-01 19:49
615 查看
全排列问题
八皇后问题
组合问题
#include <iostream> using namespace std; void swap(char *a, char *b){ char tmp = *a; *a = *b; *b = tmp; } void find_core(char* col, char* begin){ if (*begin == '\0'){ cout << col << endl; } else{ for (char *ch = begin; *ch != '\0'; ++ch){ swap(ch, begin); find_core(col, begin + 1); swap(ch, begin); } } } void find(char *col){ find_core(col, col); } int main(){ //char col[10] = "01234567"; //char col[10] = "0123"; char col[] = "abc"; find(col); int ttt = 0; return 0; }
八皇后问题
#include <iostream> using namespace std; //#define LENGTH 8 #define LENGTH 4 void print(int *a){ for (int i = 0; i < LENGTH; ++i) cout << a[i]; cout << endl; } void swap(int &a, int &b){ int tmp = a; a = b; b = tmp; } bool check_valid(int *col){ bool flag = true; for (int i = 0; i < LENGTH - 1; ++i){ for (int j = i + 1; j < LENGTH; ++j){ if (col[i] - col[j] == i - j || col[i] - col[j] == j - i){ flag = false; break; } } if (!flag) break; } return flag; } void find_core(int *col, int k){ if (k == LENGTH){ //if (k == LENGTH - 1)也可以 if (check_valid(col)) print(col); } else{ for (int i = k; i < LENGTH; ++i){ swap(col[i], col[k]); find_core(col, k + 1); swap(col[i], col[k]); } } } void find(int *col){ find_core(col, 0); } int main(){ //int col[] = {0, 1, 2, 3, 4, 5, 6, 7}; int col[] = {0, 1, 2, 3}; find(col); int ttt = 0; return 0; }
组合问题
#include <iostream> using namespace std; void find_core(char *a, int m, int start, char *buf){ if (m > strlen(a) - start) return; if (m == 0) { cout << buf << endl; } else { //start位置的字符为组合中的字符 int last_len = strlen(buf); buf[last_len] = a[start]; buf[last_len + 1] = '\0'; find_core(a, m - 1, start + 1, buf); //start位置的字符不为组合中的字符 buf[last_len] = '\0'; find_core(a, m, start + 1, buf); } } void find(char *a, int m){ char *buf = new char [m + 1]; memset(buf, '\0', m + 1); find_core(a, m, 0, buf); } int main(){ char a[] = "abc"; find(a, 2); int ttt = 0; return 0; }
相关文章推荐
- 在原装Win8操作系统的计算机上U盘安装CentOS6.5系统
- iOS界面篇 - bounds和frame的相同和区别
- NSOJ 飞船汇合(经典)
- rsyslog日志系统
- hdu 2860 Regroup【并查集+有道】
- 读取数据库表的前十条数据
- a标签冒泡
- 码农小汪-Hibernate学习5-hibernate中对象的三种状态分析
- 去掉input框点击时的默认颜色
- 剑指offer-面试题23:从上往下打印二叉树
- CentOS 6.0 启动时出现fstab错误时的修复
- c#-随机数2
- 像Maven一样构建java项目的目录,更好的管理java工程的源码
- java基础知识总结(二)
- 一个简单的时间获取客户程序
- 关于Xib 需要注意的地方
- 网络配置
- hibernate常用集合映射详解
- POJ2485 Highways(最小生成树)
- Tesseract-Oct的使用及语言库的训练