您的位置:首页 > 其它

回溯法求解全排列问题

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");
}

总结:回溯法思路类似于深度优先遍历,

要求单个解时,返回一条满足条件的 从根到叶子的路径;

多个解时,要遍历所有结点(根据需要满足的条件用剪枝函数避免无效搜索),返回多个从根到叶子的路径;

解的结果类似一个栈,根为栈底,叶子为栈顶
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: