全排列STL的实现

全排列STL的实现,第1张

排列STL的实现

问题:给定一个字符串,实现他的全排列,如”abc"全排列为abc,acb,bac,bca,cab,cba.
细究,就可以将其理解为一中递归思想。
f(abc)=a+f(bc),f(bc)=b+f©,f©=c;
下文给出两种解决放大。一个用相对比较古老的两数交换的C语言方法,一个用到STL两种算法。
如下代码

void swap(char* a, char* b)
{
	char temp = *a;
	*a = *b;
	*b = temp;
}
void Permutation(char* pStr, char* pPostion)
{
	// 基准点
	if (*pPostion == '')
	{
		cout << pStr << endl;
	}
	else
	{
		for (char* pChar = pPostion; *pChar != ''; pChar++)
		{
			// 依次和后面的字符交换
			swap(*pChar, *pPostion);

			Permutation(pStr, pPostion + 1);

			// 换回来
			swap(*pChar, *pPostion);
		}
	}
}


int main()
{
	char test[] = "132";
	Permutation(test, test);
	cout << endl;

	// 用STL输出全排列
	// 注意:必须要保证数组顺序,
	do
	{
		cout << test[0] << test[1] << test[2] << endl;
	} while (next_permutation(test, test + 3));
	cout << endl;

	char test2[] = "321";
	// 注意:必须要保证数组顺序,
	do
	{
		cout << test2[0] << test2[1] << test2[2] << endl;
	} while (prev_permutation(test2, test2 + 3));

    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5611343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存