#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <stdlib.h>
int num; //人类的数字
int a[10001]; //火星人的数字排列
int n; //n根手指
int weizhi; //枚举到了哪
int sum=0; //加了多少
int st[10001] = { 0 }; //标记使用过
int b[10001]; //记录方案
void dfs(int weizhi)
{
if (sum > num)
return;
if (weizhi == n)
{
sum++;
if (sum == num+1)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("%d ", b[i]);
}
exit(0);
}
return;
}
int j = 0;
for (j = 1; j <= n; j++)
{
if (sum == 0)
{
j = a[weizhi];
}
if (!st[j])
{
b[weizhi] = j;
st[j] = 1;
dfs(weizhi + 1);
st[j] = 0;
b[weizhi] = 0;
}
}
}
int main()
{
scanf("%d", &n );
scanf("%d", &num);
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
dfs(0);
return 0;
}
洛谷火星人
最新推荐文章于 2024-07-25 14:01:09 发布
该篇文章介绍了如何使用C++中的深度优先搜索(DFS)算法解决一个关于给定整数数组的排列问题,目标是在n根手指限制下找到使得总和等于给定数值num+1的排列组合。
摘要由CSDN通过智能技术生成