0
点赞
收藏
分享

微信扫一扫

nyoj 擅长排列的小明 19 (dfs)


擅长排列的小明



1000 ms  |  内存限制: 65535



4




第一行输入整数N(1<N<10)表示多少组测试数据,

每组测试数据第一行两个整数 n m (1<n<9,0<m<=n)

输出 在1-n中选取m个字符进行全排列,按字典序全部输出,每种排列占一行,每组数据间不需分界。如样例 样例输入

2 3 1 4 2


样例输出

1
2
3
12
13
14
21
23
24
31
32
34
41
42
43



#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[10];
int vis[10];
int n,m;
void dfs(int x)
{
	if(x==m)
	{
		for(int i=0;i<m;i++)
			printf("%d",a[i]);
		printf("\n");
	}
	for(int i=0;i<n;i++)
	{
		if(!vis[i])
		{
			a[x]=i+1;
			vis[i]=1;
			dfs(x+1);
			vis[i]=0;
		}
	}
}
int main()
{
	int t,i,j;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		for(i=0;i<10;i++)
			vis[i]=0;
		dfs(0);
	}
	return 0;
}


举报

相关推荐

0 条评论