首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-03-20 
排列算法中遇到的swap函数问题#include cstdio#include cstdlib#include cstring#define N 20void P

排列算法中遇到的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; 
}
这能编译过?。。。。。
[解决办法]
用异或做交换,源和目的不能相同,显然你程序可能源和目的相同,因此不对

热点排行