现在的位置: 首页 > 综合 > 正文

hdu 1027 Ignatius and the Princess II

2018年12月28日 ⁄ 综合 ⁄ 共 612字 ⁄ 字号 评论关闭

求n个数全排列的第m个,,

深搜的顺序就是排列的顺序

8!=40320

给的m<=10000,所以只要排列八个数就可以了

 

 

 

 

 

#include<stdio.h>
#include<string.h>
int m,n,count,num[9],k,link[9];
void dfs(int u)
{
	int i;
	if(count==m)return;
	if(u==9)
	{
		count++;
		if(count==m)
		{
			if(n<=8)
			{
				printf("%d",num[k+1]-k);
				for(i=k+2;i<=8;i++)
					printf(" %d",num[i]-k);
				printf("\n");
			}
			else 
			{	printf("1");
			for(i=2;i<=k;i++)
				printf(" %d",i);
			for(i=1;i<=8;i++)
				printf(" %d",num[i]+k);
			printf("\n");
			}
		}
	}
	for(i=1;i<=8;i++)
	{
		if(link[i]==0)
		{
			link[i]=1;
			num[u]=i;
			dfs(u+1);
			link[i]=0;
		}
	}
}
int main()
{
	int i,j;
	while(scanf("%d%d",&n,&m)!=-1)
	{
		memset(num,0,sizeof(num));
		memset(link,0,sizeof(link));
		count=0;
		if(n<8)
			k=8-n;
		else k=n-8;
		dfs(1);
	}
	return 0;
}

 

抱歉!评论已关闭.