全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

 

至于如何用代码实现, 我分了两种情况

1. 在这 n 个元素中不存在相同元素

2. 在这 n 个元素中存在相同元素

 

#include <iostream>    // 不含相同元素的全排列 
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char str[10];

void solve(char *str_begin, char *str_end)
{
//    sort(str, str+strlen(str));
//    puts(str);
    if(*str_end == '\0')
    {
        puts(str_begin);
    }
    
    else{
        for(char *tstr = str_end; *tstr != '\0'; tstr++)
        {
                swap(*str_end, *tstr);
                solve(str_begin, str_end+1);
                swap(*str_end, *tstr);
        }
    }
}
/*
void Permutation(char* pStr, char* pBegin)
{
//    assert(pStr && pBegin);

    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()
{
    gets(str);
    solve(str, str);
    puts("");
//    Permutation(str, str);
    
    return 0;
}

 

下面是含有相同元素的全排列

#include <iostream>    // 含相同字符的字符串全排列
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;

char str1[10], str2[10];
int len;

void solve(char *d, char *s, int i)
{
    char t;
    for(int j = 0; j< len; j++)
    {
        if(j> 0 && s[j] == s[j-1])
            continue;
        else if(s[j] != '#'){
            d[i] = s[j];
            t = s[j];
            s[j] = '#';
            if(i == len-1){
                d[len] = '\0';
                puts(d);
            }
            else{
                solve(d, s, i+1);
            }
            s[j] = t;
        }
    }
}

int main()
{
    gets(str1);
    len = strlen(str1);
    sort(str1, str1+len);
//    puts(str1);
    solve(str2, str1, 0);

    return 0;
}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值