回溯法求解全排列问题
2017-09-03 18:13
218 查看
#include<algorithm>
#include<iostream>
using namespace std;
void swap(char *a, char *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void pl(char *a, char * begin)
{
if (*begin == '\0')
{
cout << a << endl;
}
for (char *p = begin; *p != '\0'; p++)
{
swap(*begin, *p);
pl (a, begin + 1);
swap(*p, *begin);
}
}
int main()
{
char a[] = "abc";
pl(a, a );
system("pause");
}
总结:回溯法思路类似于深度优先遍历,
要求单个解时,返回一条满足条件的 从根到叶子的路径;
多个解时,要遍历所有结点(根据需要满足的条件用剪枝函数避免无效搜索),返回多个从根到叶子的路径;
解的结果类似一个栈,根为栈底,叶子为栈顶
#include<iostream>
using namespace std;
void swap(char *a, char *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void pl(char *a, char * begin)
{
if (*begin == '\0')
{
cout << a << endl;
}
for (char *p = begin; *p != '\0'; p++)
{
swap(*begin, *p);
pl (a, begin + 1);
swap(*p, *begin);
}
}
int main()
{
char a[] = "abc";
pl(a, a );
system("pause");
}
总结:回溯法思路类似于深度优先遍历,
要求单个解时,返回一条满足条件的 从根到叶子的路径;
多个解时,要遍历所有结点(根据需要满足的条件用剪枝函数避免无效搜索),返回多个从根到叶子的路径;
解的结果类似一个栈,根为栈底,叶子为栈顶
相关文章推荐
- 回溯法求解全排列问题(可去除重复排列)
- 递归求解字符数组全排列问题
- 用回溯法求解跳马问题
- 回溯法求解迷宫问题
- 回溯法求解N皇后问题。
- 迷宫问题(MazePath)的求解——利用回溯法(backtracking)
- 全排列问题之递归求解
- PHP实现基于回溯法求解迷宫问题的方法详解
- 回溯法解决N皇后问题——递归与非递归求解
- 算法——回溯法(子集、全排列、皇后问题)
- 回溯法求解哈密顿回路问题
- 回溯法求解和的问题
- 回溯法求解N人分N本书的问题(Java实现)
- Python基于回溯法子集树模板解决全排列问题示例
- 经典算法(1)——8皇后问题求解(回溯法)
- 回溯法求解01背包问题
- 贪心法和回溯法 求解“背包、0/1背包问题”——Java 实现
- 回溯法-求解装载问题(类似0-1背包)
- 数据结构与算法中的“递归”——用回溯法求解8皇后问题
- [编程之美]回溯法求解数组分割问题