/**
|--abc(k = 1,i = 1)
|- -abc(k = 0,i = 0)---|
| |--acb(k = 1,i = 2)
|
| |--bac(k = 1,i = 1)
abc--|- -bac(k = 0,i = 1)---|
| |--bca(k = 1,i = 2)
|
| |--cba(k = 1,i = 1)
|- -cba(k = 0,i = 2)---|
|--cab(k = 1,i = 2)
*/
#include<iostream>
using namespace std;
void Permutations(char *p, const int k, const int m)
{
if(k == m)
{
for(int i = 0; i <= m; i++)
cout << p[i];
cout << endl;
}
else
{
for(int i = k; i <= m; i++)
{
swap(p[k], p[i]);///完成对应的操作
Permutations(p, k+1, m);///该处相当于图中的深搜,只是没有明确的节点而已,搜到控制的搜索深度后,进行后退
swap(p[k], p[i]);///在后退的过程中进行还原
}
}
}
int main()
{
char s[] = "abc";
Permutations(s, 0, 2);
return 0;
}