codevs1031

题目地址:http://codevs.cn/problem/1031/

分析:

深搜回溯

代码:

var s:set of 1..17;

a:array[1..17]of word;

n:word;

b:boolean;

procedure print;{输出}

var i:word;

begin

for i:=1 to n do

write(a[i],‘ ‘);

writeln;

end;

function pd(x:word):boolean;{判断是否素数}

var i:word;

begin

pd:=true;

for i:=2 to trunc(sqrt(x))do

if x mod i=0 then begin pd:=false; break;end;

end;

procedure search(k:word);{回溯搜索}

var i:word;

begin

a[1]:=1;{将1定为起始}

for i:=2 to n do

if (i in s)and(pd(i+a[k-1]))then begin

a[k]:=i;

s:=s-[i];

if (k=n)and(pd(i+a[1])) then print{别忘记判断第一个和最后1个}

else search(k+1);

s:=s+[i];

end;

end;

begin

readln(n);

if (n mod 2=1) then halt;{单数肯定不会有,数学想想便知}

s:=[2..n];

search(2);

end.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 21:37:17

codevs1031的相关文章

【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.由于要输出字典序最小的方案,所以第一个一定是一