前N个小写字母中取M个的所有排列,但相邻的位置上字母不能是相邻字母。按照字典序从小到大输出。
输入格式
一行2个正整数N和M, 0< M <= N <8
输出格式
每行一个排列。
输入/输出例子1
输入:
4 3
输出:
adb
bda
cad
dac
样例解释
无
#include<bits/stdc++.h>
using namespace std;
int n,m;
bool inuse[7];
int ans[9];
void A(int i)
{
if(i==m+1)
{
for(int j=1;j<=m;j++)
{
cout<<char(ans[j]+'a'-1);
}
cout<<endl;
return ;
}
for(int j=1;j<=n;j++)
{
if(ans[i-1]!=j+1&&(ans[i-1]+1!=j||i==1)&&inuse[j]==false)
{
inuse[j]=true;
ans[i]=j;
A(i+1);
inuse[j]=false;
}
}
}
int main(){
cin>>n>>m;
A(1);
return 0;
}