// win32Console.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
//参数为引用,函数调用多,所以定义我内联函数
inline void charSwap(char &_left, char &_right)
{// 交换_left和_right
char temp = _left;
_left = _right;
_right = temp;
}
//arr为字符数组,nPrefix表示前缀的下标,nSize表示arr大小(字符个数)
void fullPermulation(char arr[], int nPrefix, int nSize)
{//打印arr[]的全排列
int i=0;
if(nPrefix == nSize-1)
{//前缀是最后的位置,打印一个排列
for(i=0; i
putchar(arr[i]);
putchar('\n');
}
else
{//arr[nPrefix...nSize-1]有多种排列方式,递归地产生这些排列方式
for(i=nPrefix; i
{
if(i != nPrefix)
charSwap(arr[nPrefix], arr[i]);//交换前缀,产生下一次前缀
fullPermulation(arr, nPrefix+1, nSize);
if(i != nPrefix)
charSwap(arr[nPrefix], arr[i]);//恢复原有的顺序
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char arr[]={'1', '2', '3'};
fullPermulation(arr, 0, sizeof(arr)/sizeof(char));
return 0;
}