读书人

排列算法中遇到的swap函数有关问题

发布时间: 2013-03-20 15:25:24 作者: rapoo

排列算法中遇到的swap函数问题
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define N 20

void Permutation(char* pStr, char* pBegin);

int cmp ( const void *a , const void *b )
{
return *(char *)a - *(char *)b;
}

void Swap(char *a, char *b)
{
*pCh ^= *pBegin;
*pBegin ^= *pCh;
*pCh ^= *pBegin;
}

void Permutation(char* pStr)
{
Permutation(pStr, pStr);
}

void Permutation(char* pStr, char* pBegin)
{
if(!pStr || !pBegin)
return;
if(*pBegin == '\0')
{
printf("%s\n", pStr);
}
else
{
for(char* pCh = pBegin; *pCh != '\0'; ++ pCh)
{

Swap(pBegin, pCh);

Permutation(pStr, pBegin + 1);

Swap(pBegin, pCh);
}
}
}

int main() {
char a[N];
while(scanf("%s", a) != EOF) {
int len = strlen(a);
qsort(a, len, sizeof(char), cmp);
Permutation(a);
}
return 0;
}

所输出的结果不正确,是swap()交换变量时发生了错误,而使用以下交换变量的函数时就输出正确:
void Swap(char *a, char *b)
{
char temp = *a;
*a = *b;
*b = temp;
}

请问第一个交换变量的函数为什么在这里就不能用,还有这种交换变量的方法有什么适用场合?求大神解答 算法 permutation
[解决办法]
void Swap(char *a, char *b)
{
*pCh ^= *pBegin;
*pBegin ^= *pCh;
*pCh ^= *pBegin;
}
这能编译过?。。。。。
[解决办法]
用异或做交换,源和目的不能相同,显然你程序可能源和目的相同,因此不对

读书人网 >C++

热点推荐