该代码最后输出时候不是字典序,比如1 2 3就不是字典序
#include
using namespace std;
void Allc(char ary[],int,int);
bool judge(char ary[],int,int);
inline void Swap(char &x,char &y);
int count=0;
int main(){
int i,j,n;
char a[501],t;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i
for(j=1;j
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
Allc(a,1,n);
cout<
return 0;
}
void Allc(char ary[],int l,int r){
if(l==r){
count++;
for(int i=1;i
cout
return;
}
int i,j;
for(i=l;i
if(judge(ary,l,i)){
Swap(ary[i],ary[l]);
Allc(ary,l+1,r);
Swap(ary[i],ary[l]);
}
}
}
inline void Swap(char &x,char &y){
char temp=x;
x=y;
y=temp;
}
bool judge(char ary[],int x,int y){
int i,j;
if(y>x){
for(j=x;j<y;j++)
if(ary[j]==ary[y]) return false;
}
return true;
}
求问:带有重复元素全排列怎么按字典序输出啊
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- dabocaiqq 2019-12-22 12:54关注
这样写试试看
#include
using namespace std;
void Allc(char ary[],int,int);
bool judge(char ary[],int,int);
inline void Swap(char &x,char &y);
int count=0;
int main(){
int i,j,n;
char a[501],t;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i for(j=1;j if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
Allc(a,1,n);
cout< < return 0;
}
void Allc(char ary[],int l,int r){
if(l==r){
count++;
for(int i=1;i cout return;
}
int i,j;
for(i=l;i if(judge(ary,l,i)){
Swap(ary[i],ary[l]);
Allc(ary,l+1,r);
Swap(ary[i],ary[l]);
}
}
}
inline void Swap(char &x,char &y){
char temp=x;
x=y;
y=temp;
}
bool judge(char ary[],int x,int y){
int i,j;
if(y>x){
for(j=x;j<y;j++)
if(ary[j]==ary[y]) return false;
}
return true;
}解决 无用评论 打赏 举报