很简单的深搜..虽然时间很长281MS.
#include<stdio.h>
#include<math.h>
#include<string.h>
int digit[21]; //存储数字
int status[21]; //代表当前数字的状态
int n;
int judge(int sum)
{
int k=(int)sqrt((double)sum);
int i;
for(i=2;i<=k+1;i++)
if(sum%i==0)return 0;
return 1;
}
void dfs(int total,int index)
{
int i;
digit[total]=index;
status[index]=1;
if(total==n)
{
if(judge(digit[total]+digit[1]))
{
for(i=1;i<n;i++)
printf("%d ",digit[i]);
printf("%d\n",digit[total]);
return ;
}
}
for(i=2;i<=n;i++)
{
if(!status[i]&&judge(digit[total]+i))
{
status[i]=1;
dfs(total+1,i);
status[i]=0;
}
}
}
int main()
{
int i=1;
while(scanf("%d",&n)!=EOF)
{
memset(status,0,sizeof(status));
printf("Case %d:\n",i);
dfs(1,1);
printf("\n");
i++;
}
return 0;
}
本文展示了一个使用深度优先搜索(DFS)算法解决特定问题的示例。该算法应用于寻找符合质数条件的数字排列组合,并通过递归实现,确保了最终结果的有效性和正确性。
425

被折叠的 条评论
为什么被折叠?



