#include<algorithm>后,可以使用其中的next_permutation()函数
#include <iostream>
#include <cstring>
#include <cstdio>
#include <windows.h>
#include <algorithm>
using namespace std;
int main()
{
int a[3];
int len=sizeof(a)/4;
for(int i=0;i<len;i++)
{
a[i]=i+1;
}
do{//这里用do while,先输出未用排列函数打乱之前的排列,不然会少一个
for(int i=0;i<len;i++)
printf("%d",a[i]);
printf("\n");
}while(next_permutation(a,a+len));
system("pause");
return 0;
}
next_permutation()函数会重修排列数组,并返回true false
达到最后一个排列时,返回false
void permutation(int a[],int start,int total)
{
if (start == total - 1)
{
//排列好了,进行操作
for (int i = 0; i<total; i++)
cout << a[i]<<" ";
cout << endl;
return;
}
int temp = 0;
for (int i = start; i < total; i++)
{
//swap(*(a + start), *(a + i));
swap(a[start], a[i]);//交换
permutation(a, start + 1, total);
swap(a[i], a[start]);//本次排列结束,恢复状态,等待下一个循环的交换
}
}
或者用全局数组,传参数少
#include <iostream>
#include <cstring>
#include <cstdio>
#include <windows.h>
#include <algorithm>
using namespace std;
#define n 5// 更大的数,控制台可能就没法显示全了,只显示后面的一部分
void permut(int index);
int a[n]={0};
int p[n]={0};
bool harsh[n]={false};
int len=sizeof(a)/4;
int cnt=0;
int main()
{
//int len=sizeof(a)/4;
for(int i=0;i<n;i++)
a[i]=i+1;
permut(0);
cout<<cnt;
system("pause");
return 0;
}
void permut(int index)
{
if(index==len)
{
for(int i=0;i<len;i++)
printf("%d",p[i]);
printf("\n");
cnt++;
return;
}
for(int i=0;i<len;i++)
{
if(harsh[i]==false)
{
p[index]=a[i];
harsh[i]=true;
permut(index+1);
harsh[i]=false;
}else
continue;
}
return;
}
原文链接: https://www.cnblogs.com/lxzbky/p/10544344.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/400144
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!