实现字符串的全排列,例如“abc”,全排列有6种"abc"、“acb”、“bac”、“bca”、“cab”、“cba”,通过递归实现,代码如下:
#include<iostream>
using namespace std;
bool flag[256] = { false }; // 访问标志数组
void Dfs_str(int step, char* strSrc, char* strDst)
{
int nLen = strlen(strSrc);
if (step == nLen)
{
cout << strDst << endl;
return;
}
else
{
for (int i=0;i<nLen;i++)
{
if (!flag[i])
{
strDst[step] = strSrc[i];
flag[i] = 1; // 访问标志
Dfs_str(step + 1, strSrc, strDst); // 递归排列
flag[i] = 0; // 清空访问标志,回溯
}
}
}
}
void main()
{
char szStr[256] = { 0 };
cout << "请输入要全排序的字符串:";
cin >> szStr;
char* pStrDst = new char[strlen(szStr)+1];
memset(pStrDst, 0, sizeof(char)*(strlen(szStr)+1));
Dfs_str(0, szStr, pStrDst);
delete[]pStrDst;
}