全排列——从1~n中选出m个数字
基于dp——将问题分解为当前数字是否要用,先是后否,达到字典序排列。
数据结构:
- visit:一个数组标记当前数字是否被用到
- ans: 一个数组储存当前全排列数
代码如下:
#include<iostream>
#include<stdio.h>
#include<string>
#define len 10
using namespace std;
int m,n,ans[len],vis[len];
void put_out();
void dsp(int dsp_count);
int main_all(){
scanf("%d%d",&n,&m);
dsp(0);
return 0;
}
void put_out(){
for(int i=0;i<m;i++){
printf("%d ",ans[i]);
}
printf("\n");
}
void dsp(int dsp_count){
if(dsp_count==m){
put_out();
}
for(int i=1;i<=n;i++){
if(!vis[i]){
ans[dsp_count]=i;
vis[i]=1;
dsp(dsp_count+1);
vis[i]=0;
}
}
}