欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 人文社科 > 生活经验 >内容正文

生活经验

素数环问题---深度搜索遍历

发布时间:2023/11/27 生活经验 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 素数环问题---深度搜索遍历 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1264: 素数环

时间限制: 1 Sec  内存限制: 128 MB
提交: 29  解决: 8
[提交][状态][讨论版]

题目描述

有一个长度为n的环形序列由1,2,3,...,n组成,环中相邻两个整数和均为素数。你需要找到所有满足条件的环。

输入

输入n表示环的长度(n<=16)

输出

输出从整数1开始的逆时针排列的所有环。

样例输入

6

样例输出

1 4 3 2 5 6 
1 6 5 2 3 4 

提示

来源

西安交通大学复试机试题

[提交][状态]

 

#include<stdio.h>
#include<string.h>//20以内的数最大和40 
int prime[40]={1,1,0,0,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,01,1,1,0,1,1};
int visit[21];
int ring[21];/*
void Is_prime()
{int i,j;prime[0]=prime[1]=1;for(i=2;i<=6;++i)for(j=i*i;j<40;j+=i)prime[j]=1;
}
*/
void DFS(int k,int n)
{int i;if(k==n+1&&prime[ring[n]+ring[1]]==0){//printf("1");for(i=1;i<=n;++i)printf("%d ",ring[i]);//不处理格式问题printf("\n");return;}for(i=1;i<=n;++i){if(!visit[i]&&!prime[i+ring[k-1]]){visit[i]=1;ring[k]=i;DFS(k+1,n);visit[i]=0;//还原!! 很重要!!!
        }}
}int main()
{int T,n;T=1;
//    Is_prime();while(scanf("%d",&n)!=EOF){//printf("Case %d:\n",T++);if(n==1){printf("1 \n");continue;}if(n&1){//printf("No Answer\n");continue;}memset(visit,0,sizeof(visit));visit[1]=ring[1]=1;DFS(2,n);}return 0;
}

 

转载于:https://www.cnblogs.com/xiaoyunoo/p/6514702.html

总结

以上是生活随笔为你收集整理的素数环问题---深度搜索遍历的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。