C++全排列怎么弄
发布网友
发布时间:2022-06-27 00:31
我来回答
共2个回答
热心网友
时间:2024-11-23 21:46
你的全排列算法不成立,我给你一个全排列的例子,你看看吧.
#include<iostream>
#include<cstring>
using namespace std;
static int count=0;
void Swap(char *a,char *b)
{
char tmp=*a;
*a=*b;
*b=tmp;
}
void AllRange(char *pszStr,int k,int m)
{
if(k==m)
{
count++;
cout<<pszStr<<endl;
}
else
{
for(int i=k;i<=m;i++)
{
Swap(pszStr+i,pszStr+k);
AllRange(pszStr,k+1,m);
Swap(pszStr+i,pszStr+k);
}
}
}
int main()
{
int n;
cin>>n;
char *szTextStr;
sprintf(szTextStr,"%d",n);
cout<<szTextStr<<"的全排列如下:"<<endl;
AllRange(szTextStr,0,strlen(szTextStr)-1);
cout<<"共"<<count<<"个"<<endl;
return 0;
}
热心网友
时间:2024-11-23 21:46
//全排列问题可以用递归解决,下面是一个例子。
#include<iostream>
using namespace std;
int i,n,total=0,*arr;
void swap(int &a,int &b)
{
int t=a;
a=b;
b=t;
}
void pailie(int beginindex)
{
int bi;
if(beginindex==n)
{
for(i=0;i<n-1;i++)
cout<<arr[i]<<' ';
cout<<arr[n-1]<<endl;
total++;
return;
}
for(bi=beginindex;bi<n;bi++)
{
swap(arr[beginindex],arr[bi]);
pailie(beginindex+1);
swap(arr[beginindex],arr[bi]);
}
}
int main()
{
cin>>n;
arr=new int[n];
for(i=0;i<n;i++)
arr[i]=i+1;
pailie(0);
cout<<"共"<<total<<"种排列方法"<<endl;
delete [] arr;
return 0;
}