[Wikioi 1031]质数环---HBNU的童鞋过来看看

题目描述 Description

一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数。如下图是一个大小为6的质数环。为了方便描述,规定数环上的第一个数字总是1。如下图可用1 4 3 2 5 6来描述。若两个质数环,数字排列顺序相同则视为本质相同。现在要求你求出所有本质不同的数环。

输入描述 Input Description

只有一个数N,表示需求的质数环的大小。如:

输出描述 Output Description

每一行描述一个数环,如果有多组解,按照字典序从小到大输出。如:

样例输入 Sample Input

6

样例输出 Sample Output

1 4 3 2 5 6

1 6 5 2 3 4

数据范围及提示 Data Size & Hint

n<=17

对代码不做解释,貌似标程就是我的代码,普通的DFS就行,建议用数组保存每个数是否是质数,这样可以省去重复判断质数的时间,而且使代码更简单

#include <stdio.h>
#define MAXN 1000
int prime[MAXN],sol[MAXN],used[MAXN],n;
//prime[i]=1表示i是质数,sol[i]=当前输出方案中环上第i个数,used[i]=当前输出方案中环上第i个数
int isprime(int in) //是质数返回1,不是返回0
{
	int i;
	for(i=2;i<in;i++)
		if(in%i==0)
			return 0;
	return 1;
}
void dfs(int m) //填写环上第m个数
{
	int i,j;
	if(m>n) //最后一个数已经填写完
	{
		for(j=1;j<=n;j++)
			printf("%d ",sol[j]);
		printf("\n");
		return;
	}
	for(i=2;i<=n;i++)
	{
		if(used[i]==0&&prime[sol[m-1]+i]) //数字i没有用过且i与第m-1个数之和为质数
		{
			used[i]=1;
			sol[m]=i;
			if(m<n) dfs(m+1);
			else if(prime[sol[1]+i]) dfs(m+1);
			sol[m]=0;
			used[i]=0;
		}
	}
}
int main()
{
	int i;
	scanf("%d",&n);
	for(i=2;i<=2*n;i++)
		prime[i]=isprime(i);
	used[1]=1; //数字1被用过了
	sol[1]=1; //第一个数是数字1
	dfs(2);
	return 0;
}

[Wikioi 1031]质数环---HBNU的童鞋过来看看

时间: 2025-01-05 23:20:42

[Wikioi 1031]质数环---HBNU的童鞋过来看看的相关文章

深度优先搜索 codevs 1031 质数环

codevs 1031 质数环 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 4 3 2 5 6来描述.若两个质数环,数字排列顺序相同则视为本质相同.现在要求你求出所有本质不同的数环. 输入描述 Input Description 只有

1031 质数环

1031 质数环 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 4 3 2 5 6来描述.若两个质数环,数字排列顺序相同则视为本质相同.现在要求你求出所有本质不同的数环. 输入描述 Input Description 只有一个数N,表示

1031 质数环(深搜练习)

题目网站:http://codevs.cn/problem/1031/ 题目描述 Description 一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 4 3 2 5 6来描述.若两个质数环,数字排列顺序相同则视为本质相同.现在要求你求出所有本质不同的数环. 输入描述 Input Description 只有一个数N,表示需求的质数环的大小.如: 输

codevs 1031 质数环

一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 4 3 2 5 6来描述.若两个质数环,数字排列顺序相同则视为本质相同.现在要求你求出所有本质不同的数环. 输入描述 Input Description 只有一个数N,表示需求的质数环的大小.如: 输出描述 Output Description 每一行描述一个数环,如果有多组解,按照字典序从小到大输出.如

CodeVS 1031 质数环(DP)

题目大意: http://codevs.cn/problem/1031/ #include <iostream> #include <cmath> #include <algorithm> #include <string> using namespace std; int arr[17] = {0}; bool f[17] = {false}; bool isPrime(int a) { if(a == 0) return false; if(a == 1

[Wikioi 2808][NOIP 1998普及组]二的幂次方---HBNU的童鞋过来看看

转载请说明出处:http://blog.csdn.net/cywosp/article/details/27095723 <黑天鹅--如何应对不可预知的未来> 作者:纳西姆?尼古拉斯?塔勒布 关于黑天鹅 在发现澳大利亚黑天鹅之前,所有欧洲人都确信天鹅全部都是白色的,人们在经过上百万次的确定性观察白天鹅之后得到了这一结论,而且一直延续了上千年,直到黑天鹅的出现,从而将这一结论完全打破.通过黑白天鹅的现象说明我们通过观察或经验获得的知识具有严重的局限性和脆弱性,仅仅一次的完全不同的发现就足以颠覆根

【CodeVS1031】质数环

Description 一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 4 3 2 5 6来描述.若两个质数环,数字排列顺序相同则视为本质相同.现在要求你求出所有本质不同的数环. Input 只有一个数N,表示需求的质数环的大小.如: Output 每一行描述一个数环,如果有多组解,按照字典序从小到大输出.如: Sample Input 6 Sampl

codevs1031 质数环

一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 4 3 2 5 6来描述.若两个质数环,数字排列顺序相同则视为本质相同.现在要求你求出所有本质不同的数环. 思路: 1.首先素数环,就一定要进行素数判定,考虑n<=17,可以直接暴力求出来,或者说直接可以开一个数组,把与i的和为素数的j从小到大记录下来 2.由于要输出字典序最小的方案,所以第一个一定是一

深搜-质数环

题目描述 Description 一个大小为N(N<=17)的质数环是由1到N共N个自然数组成的一个数环,数环上每两个相邻的数字之和为质数.如下图是一个大小为6的质数环.为了方便描述,规定数环上的第一个数字总是1.如下图可用1 4 3 2 5 6来描述.若两个质数环,数字排列顺序相同则视为本质相同.现在要求你求出所有本质不同的数环. 输入描述 Input Description 只有一个数N,表示需求的质数环的大小.如: 输出描述 Output Description 每一行描述一个数环,如果有