从 m (0<m≤26) 个大写字母中任意选出 n (0<n≤m) 个字母排成一行,一共有多少种排列?
请编写程序,输入 m 和 n,输出从 A 开始的连续 m 个字母中任取 n 个字母的所有排列。
要求:每行输出一个排列,按字典序输出。
输入样例
3 2
输出样例
AB
AC
BA
BC
CA
CB
代码长度限制
16 KB
C (gcc)
时间限制
400 ms
内存限制
64 MB
其他编译器
时间限制
400 ms
内存限制
64 MB
#include<iostream>
#include<vector>
using namespace std;
vector<vector<char>> result;
vector<char> path;
void backtracking(int m,int n,int index);
int main(){
int n = 0;
int m = 0;
cin>>m>>n;
backtracking(m,n,65);
for(const auto&res : result){
for(const auto&num : res){
cout<<num;
}
cout<<"\n";
}
return 0;
}
void backtracking(int m,int n,int index){
if(path.size() == n){
result.push_back(path);
return;
}
for(int i = 65;i <= m+64;i++){
int flag = 0;
for(const auto&num : path){
if(char(i) == num){
flag = 1;
}
}
if(flag == 0){
path.push_back(char(i));
backtracking(m,n,i+1);
path.pop_back();
}
}
}